斐波那契数列算法
兔子问题
推理过程(公司笔试面试类型题)(斐波那契数列)
第一个月: 1 小兔子 =1
第二个月: 1 小兔子 =1
第三个月: 1 对大兔子 1 对小兔子(本月生) = 1 + 1 = 2
第四个月: 1 对大兔子 1 对小兔子(本月生) 1 对小兔子(上月生)= 1 + 1 + 1 = 3
第五个月: 2 对大兔子 2 对小兔子(本月生) 1 对小兔子(上月生)= 2 + 2 + 1 = 5
第六个月: 3 对大兔子 3 对小兔子(本月生) 2 对小兔子(上月生)= 3 + 3 + 2 = 8
第七个月: 5 对大兔子 5 对小兔子(本月生) 3 对小兔子(上月生)= 5 + 5 + 3 =13
………………以此类推
基本代码如下:(三种写法)
n1=1
n2=1
num = input("请输入计算的斐波那契数列个数:")
if num.isdigit():#isdigit()自动判断小于零
num=int(num)
if num == 0:
print("输入内容非法")
if num==1:
print(n2)
if num==2:
print(n2,n2)
if num>=3:
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 #两种交换数值写法
n1, n2 = n2, n1 + n2
print(n2, end=',') # 灵活的语法结构
pass
else:
print("输入内容非法")
利用递归实现斐波那契额算法代码如下:
def recur_fibo(n):
"""递归函数
输出斐波那契数列"""
if n <= 1:
return n
else:
#返回第n个元素的前两个数相加的值
return (recur_fibo(n - 1) + recur_fibo(n - 2))
# 获取用户输入
nterms = int(input("您要输出几项? "))
# 检查输入的数字是否正确
if nterms <= 0:
print("输入正数")
else:
print("斐波那契数列:")
for i in range(nterms):
print(recur_fibo(i),end=' ')
利用lambda表达式 + 递归实现斐波那契数列写法如下:
while True:
n=int(input("你要输入几项?:"))
if n<= 0:
print("输入正数")
else:
fbnq=lambda n: fbnq(n-1)+fbnq(n-2) if n>2 else 1
print("第",n,"项的斐波那契值为:",fbnq(n))
总结:
斐波那契数列就是从第三个元素开始,第n个元素的值就等于(n-1)+(n-2)
的值。找规律也是写算法代码的必修课。
如有纰漏,请多指教