斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
使用python如何求为n时的值呢?
def flag(b): if b < 0: return "请传入大于0的数值!" if b == 0: return 0 if b == 1: return 1 if b == 2: return 1 return flag(b-1) + flag(b-2) print(flag(-1)) print(flag(0)) print(flag(2)) print(flag(3)) print(flag(10))
打印结果:
请传入大于0的数值! 0 1 2 55
如果实现打印出的值为:1,1,2,3,5,8,13,21,34,……该如何实现呢?
#默认值带出小于或等于2的值 resList = [0,1,1] def flag(n): #递归到最后,因为flag(n-1) + flag(n-2)同时执行,n的值为1或2,直接return结果1 if n == 1 or n == 2: return 1 a = flag(n-1) + flag(n-2) #判断如果追加的值小于集合最后一个值时,则不添加值 if(a > resList[-1]): resList.append(a) return a n = 10 #因为resList集合有默认值,所以对于n小于2时,不执行函数 flag(),直接在外部处理 if n < 0: print("n不可以小与0") elif n == 0: print("0") elif n == 1: print("0,1") else: flag(n) print(resList)
执行结果
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
对于后面这个实现,只是我个人的思路,应该有更简单的做法,欢迎大家分享。