首页新闻找找看学习计划

python递归输出斐波那契数列前n项

0
[已解决问题] 解决于 2019-10-15 20:49

各位大佬们,有没有简单的用Python递归来输出斐波那契数列的前n项的方法???

胜者万里也称王的主页 胜者万里也称王 | 菜鸟二级 | 园豆:223
提问于:2019-09-19 21:01
< >
分享
最佳答案
0

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]))

奖励园豆:5
窗户 | 菜鸟二级 |园豆:432 | 2019-09-30 20:43

看你那个好像用了MAP函数来迭代出项数,能不能只用递归实现呢?

胜者万里也称王 | 园豆:223 (菜鸟二级) | 2019-10-12 11:37

@胜者万里也称王:
我文中应该还是比较详细的,但目的主要是以如何快速的计算某一项。
map/reduce是函数式编程常用算子,所以经常使用也很正常
真要全用手动递归(实则迭代,递归效率低),而不用现成算子。
list_f = lambda n:[1]*n if n<3 else (lambda r:r+[r[-1]+r[-2]])(list_f(n-1))

窗户 | 园豆:432 (菜鸟二级) | 2019-10-12 13:13
其他回答(1)
0

直接用函数递归就可以了,比如下面的代码

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])
刘云宾 | 园豆:206 (菜鸟二级) | 2019-09-20 00:45

这种只能输出第n项,我想要输出前n项,不知道有没有什么简单的递归方法

支持(0) 反对(0) 胜者万里也称王 | 园豆:223 (菜鸟二级) | 2019-09-20 19:08

@胜者万里也称王: 非得用递归吗?

支持(0) 反对(0) 刘云宾 | 园豆:206 (菜鸟二级) | 2019-09-20 19:19

@刘云宾: 我只是想知道用递归能不能更简单的实现,毕竟斐波那契数列是递归的经典
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("输入错误,请重新输入!")
这样严谨点

支持(0) 反对(0) 胜者万里也称王 | 园豆:223 (菜鸟二级) | 2019-09-20 21:05

@胜者万里也称王: 递归效率低啊,很多重复计算的

支持(0) 反对(0) 刘云宾 | 园豆:206 (菜鸟二级) | 2019-09-20 23:57

@刘云宾: 用递归解决题目的话可能效率比较低,但是我想确定一下这个题目递归能不能行?

支持(0) 反对(0) 胜者万里也称王 | 园豆:223 (菜鸟二级) | 2019-09-23 22:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册