在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较大,建议采用循环方式,因为递归方式会导致时间复杂度较高,执行速度较慢。