各位大佬们,有没有简单的用Python递归来输出斐波那契数列的前n项的方法???
https://www.cnblogs.com/Colin-Cai/p/9717119.html
有详细分析
简单点的,数列前100个
from functools import reduce
print(reduce(lambda a,b:a+[a[-1]+a[-2]], range(100-2),[1,1]))
看你那个好像用了MAP函数来迭代出项数,能不能只用递归实现呢?
@胜者万里也称王:
我文中应该还是比较详细的,但目的主要是以如何快速的计算某一项。
map/reduce是函数式编程常用算子,所以经常使用也很正常
真要全用手动递归(实则迭代,递归效率低),而不用现成算子。
list_f = lambda n:[1]*n if n<3 else (lambda r:r+[r[-1]+r[-2]])(list_f(n-1))
直接用函数递归就可以了,比如下面的代码
def Fibonacci(n):
if (n == 0):
return 0
if (n == 1):
return 1
return Fibonacci(n-1) + Fibonacci(n-2)
n = 10
print(Fibonacci(n))
-----------------------------------更新
使用非递归输出前n项
a = [1, 1]
n = 10
if n >= 1:
print(a[0])
if n >= 2:
print(a[1])
for i in range(2, n):
a.append(a[i-1] + a[i-2])
print(a[i])
这种只能输出第n项,我想要输出前n项,不知道有没有什么简单的递归方法
@胜者万里也称王: 非得用递归吗?
@刘云宾: 我只是想知道用递归能不能更简单的实现,毕竟斐波那契数列是递归的经典
a = [1, 1]
n = input("请输入要输出的项数:")
if int(n) == 1:
print(a[0])
if int(n) == 2:
print(a[1])
elif int(n)>2:
for i in range(2, int(n)):
a.append(a[i-1] + a[i-2])
print(a)
else:
print("输入错误,请重新输入!")
这样严谨点
@胜者万里也称王: 递归效率低啊,很多重复计算的
@刘云宾: 用递归解决题目的话可能效率比较低,但是我想确定一下这个题目递归能不能行?