python斐波那契数列算法

斐波那契数列算法

兔子问题

推理过程(公司笔试面试类型题)(斐波那契数列)

第一个月: 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
………………以此类推git

基本代码以下:(三种写法)
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)
的值。找规律也是写算法代码的必修课。web

若有纰漏,请多指教面试