python学习031-----python之递归(二):斐波那契数列的实现

系统 1407 0

斐波那契数列:
1     2     3     4     5     6     7     8     9     10   ...
1     1     2     3     5     8    13   21   34    55   ...

1.用迭代实现斐波那契数列(非递归方法)

            
              def fab(n):   
    n1 = 1      
    n2 = 1      
    n3 = 1     

    if n < 1:   
        print('输入有误!')
    
    while (n-2) > 0:    
        n3 = n2 + n1   #第三项为前两项和
        n1 = n2            #计算完,整体后移,准备计算下一项  
        n2 = n3            
        n -= 1              

    return n3            

a = int(input('请输入要计算的斐波那契项数:'))
result = fab(a)
print('第%d项斐波那契数为%d' % (a, result))
            
          

2.递归方法
 
原理:(树形结构图)
                                                      Fab(5)
                          Fab(4)                     +                     Fab(3)               
              Fab(3)     +      Fab(2)         +          Fab(2)    +      Fab(1)
      Fab(2)+Fab(1)+Fab(1)+Fab(0)  +  Fab(1)+Fab(0)     
Fab(1)+Fab(0)

            
              def fab1(n):
    if n < 1:
        print('输入错误!')

    if n == 1 or n == 2:
        return 1               #如果求的是第一或者第二项,直接结果为1
    else:
        return fab1(n-1) + fab1(n-2)

a = int(input('请输入要计算的斐波那契项数:'))
result = fab(a)
print('第%d项斐波那契数为%d' % (a, result))
            
          

经过比较,递归方法简单,容易理解,但是会浪费大量的CPU资源,计算时间也比非递归方法长了相当多。非递归方法无非就是代码稍微复杂一点点,但是计算时间却很短,也几乎不怎么占用CPU资源。这就是为什么不提倡使用递归方法的原因。
 


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论