在Python中查找第n个斐波那契数的程序

在Python中查找第n个斐波那契数的程序

斐波那契数列是指从0和1开始,后面每一项数字都是前两项数字的和。例如,斐波那契数列的前10项为:0, 1, 1, 2, 3, 5, 8, 13, 21, 34。

在Python中,我们可以通过递归或循环的方式来查找斐波那契数列中第n项的值。下面分别介绍这两种方式的实现方法。

通过递归查找斐波那契数列中第n项的值

使用递归方式查找斐波那契数列中第n项的值,代码如下:

def fibonacci_recursive(n):
    '''递归方式查找斐波那契数列中第n项的值'''
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci_recursive(n-1) + fibonacci_recursive(n-2)

接下来,我们对上述代码做出解释:

  • 首先,定义一个函数fibonacci_recursive(),用于查找斐波那契数列中第n项的值;
  • 如果n等于0,返回0;
  • 如果n等于1,返回1;
  • 如果n大于1,则返回调用fibonacci_recursive(n-1)fibonacci_recursive(n-2)的和。

接下来,我们调用fibonacci_recursive()函数,查找斐波那契数列中第n项的值,代码如下:

# 查找斐波那契数列中第10项的值
print(fibonacci_recursive(10))

输出结果为:

55

通过循环查找斐波那契数列中第n项的值

使用循环方式查找斐波那契数列中第n项的值,代码如下:

def fibonacci_loop(n):
    '''循环方式查找斐波那契数列中第n项的值'''
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        a = 0
        b = 1
        for i in range(2, n+1):
            c = a + b
            a = b
            b = c
        return b

接下来,我们对上述代码做出解释:

  • 首先,定义一个函数fibonacci_loop(),用于查找斐波那契数列中第n项的值;
  • 如果n等于0,返回0;
  • 如果n等于1,返回1;
  • 如果n大于1,则定义a=0和b=1;
  • 然后,用for循环从2到n,依次计算c=a+b、a=b、b=c的值;
  • 循环结束后,返回b的值。

接下来,我们调用fibonacci_loop()函数,查找斐波那契数列中第n项的值,代码如下:

# 查找斐波那契数列中第10项的值
print(fibonacci_loop(10))

输出结果为:

55

以上就是在Python中查找第n个斐波那契数的两种方法。我们可以将这两种方法进行比较,代码如下:

import time

# 递归方式查找斐波那契数列中第n项的值
def fibonacci_recursive(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci_recursive(n-1) + fibonacci_recursive(n-2)

# 循环方式查找斐波那契数列中第n项的值
def fibonacci_loop(n):
    if n == 0:
        return 0    elif n == 1:
        return 1
    else:
        a = 0
        b = 1
        for i in range(2, n+1):
            c = a + b
            a = b
            b = c
        return b

# 比较递归和循环方式查找斐波那契数列中第n项的值
start_time1 = time.time()
print(fibonacci_recursive(30))
end_time1 = time.time()
print('递归方式耗时:', end_time1 - start_time1, '秒')

start_time2 = time.time()
print(fibonacci_loop(30))
end_time2 = time.time()
print('循环方式耗时:', end_time2 - start_time2, '秒')

输出结果为:

832040
递归方式耗时: 0.21570086479187012 秒
832040
循环方式耗时: 9.5367431640625e-07 秒

由上述结果可以看出,在n等于30时,使用递归方式耗时较长,而使用循环方式耗时极短。

结论

在Python中查找斐波那契数列中第n项的值,我们可以采用递归或循环的方式。如果n较大,建议采用循环方式,因为递归方式会导致时间复杂度较高,执行速度较慢。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程