基本概念
斐波那契数列,称黄金分割数列(当数越来越大时,前一项与后一项的比列越来越接近黄金比),又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
兔子问题
问题描述:如果每对兔子每个月能生一对兔子,而出生的兔子在第二个月有生殖能力,试问一对兔子一年能繁殖多少对兔子?
推导过程:
第一月:1对兔子
第二月:1对兔子
第三月:1对兔子,1对兔子(这个月生)
第四月:1对兔子,1对兔子(这个月生),1对兔子(上个月生)
第五月:2对兔子,2对兔子(这个月生),1对兔子(上个月生)
第六月:3对兔子,3对兔子(这个月生),2对兔子(上个月生)
第七月:5对兔子,5对兔子(这个月生),3对兔子(上个月生)
第八月:8对兔子,8对兔子(这个月生),5对兔子(上个月生)
第九月:13对兔子,13对兔子(这个月生),8对兔子(上个月生)
第10月:21对兔子,21对兔子(这个月生),13对兔子(上个月生)
第11月:34对兔子,34对兔子(这个月生),21对兔子(上个月生)
第12月:55对兔子,55对兔子(这个月生),34对兔子(上个月生)
基本代码实现
n1 = 1 #存放上月兔子数
n2 = 1 #存放本月兔子数
num = input("输入需要的斐波那契数列的个数:")
#判断是否时非零的自然数
if num.isdigit():
#转为int型
num = int(num)
if num == 0:
print("输入非法")
else:
for i in range(1,num+1):
if i == 1:
print(1,end=",")
elif i == 2:
print(1,end=",")
else:
result = n1 + n2
print(result,end=",")
n1,n2 = n2,result
pass
else:
print("输入内容非法")
递归代码实现
#n为第几个斐波那契数
def cc(n):
if n == 1 or n == 2:
return 1
else:
return cc(n-2)+cc(n-1)
print(cc(4))
使用lambda表达式 + 递归实现斐波那契数列
a=lambda n:1 if n==1 or n==2 else a(n-2)+a(n-1)
方法的应用
描述:有一楼梯共n级,刚开始时你在最底部,若每次只能跨上一级或二级或三级,要恰好走上第n级,共有多少种走法?
def climb(step):
#函数结束的条件
if step==1:
return 1
elif step==2:
return 2
elif step == 3:
return 4
else:
return climb(step-1)+climb(step-2)+climb(step-3)
思路
当你在最后一阶台阶n时,你的上一阶可能在n-1阶,n-2阶,n-3阶。那么最后一阶的可能性为f(n)=f(n-1)+f(n-2)+f(n-3).