Bootstrap

python学习031-----python之递归(二):斐波那契数列的实现(递归/非递归方法效率比较)

斐波那契数列:
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资源。这就是为什么不提倡使用递归方法的原因。
 

;