题目:编写一个程序,实现斐波那契数列
思路:
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
在数学上,费波那契数列是以递归的方法来定义:
F0 = 0 (n=0)
F1 = 1 (n=1)
F(n) = F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
方法一:递归法
什么是递归函数?
递归是指函数可以直接或间接调用自身的一种特殊形式。如果一个函数在函数体内部调用自身,那么这个函数就是递归函数。
递归函数的两个关键要素
(1)递归基:递归函数需要停止递归的条件。
(2)递推式:将规模较大的问题分解成规模更小的同种问题,通过不断缩小问题规模,最终缩减到递归基的情形。
递归函数的优缺点
递归函数具有以下优点:
(1)代码简洁,易于理解。
(2)实现的方法符合计算机科学最基本的思想——分治思想。
但是,递归函数也有缺点:
(1)会占用更多的内存空间。
(2)效率较低,与循环结构相比可能更慢。
#递归
num = int(input('请输入数字:'))
def fibonacci(n):
if n == 0: return 0
if n == 1 or n == 2:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
print('第{}个斐波那契数:{}'.format(num, fibonacci(num)))
#减少尾调
def fibonacci(num, curr=0, next=1):
if num == 0:
return curr
else:
return fibonacci(num-1, next, curr+next)
尾递归是指递归函数在最后一步调用自身。尾递归优化是一种特殊的递归调用,其所占用的栈空间最多只有常数级别。Python并没有提供针对尾递归优化的机制,但是可以手动进行优化。
缓存技术是提高计算机程序性能的一种常见手段,Python中也可以使用缓存技术优化斐波那契数列的递归函数。通过字典将已经计算过的数列项进行缓存,下次调用读取缓存即可,极大地提高了函数的执行效率。
代码如下所示:
cache = {}
def fibonacci(num):
if num in cache:
return cache[num]
elif num == 0:
return 0
elif num == 1:
return 1
else:
result = fibonacci(num - 1) + fibonacci(num - 2)
cache[num] = result
return result
方法二:循环调用法
#for循环:
num = int(input('请输入数字:'))
def fibonacci(n):
a, b = 1, 1
for j in range(n - 1): # ♻️
a, b = b, a + b
return a
print('第{}个斐波那契数:{}'.format(num, fibonacci(num)))
7366




被折叠的 条评论
为什么被折叠?



