Python的递归实现斐波那契求和

153 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,[点击查看活动详情] (juejin.cn/post/709970… "juejin.cn/post/709970…") Python的递归实现斐波那契求和

程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

     使用format函数将字符右对齐格式化

     使用end参数强制输出不换行

     通过对10取模进行每10个字符换行

     代码和效果如下

image.png

2.     非递归实现,

不用递归实现就是用循环取累加

image.png

 # 递归实现fib斐波那契   
 def fib(i):  
     num_list = [0, 1]# 0 ,1不参与计算  
     if i < 2:  
         return num_list[i]  
     elif i >= 2:  
         return (fib(i - 2) + fib(i - 1))  
    
       
# Python非递归  
def fib_loop(n):  
    prev=1  
    current=1  
    x = 0  
    print('{: >5}'.format(1),end="")  
    for i in range(1,n):  
        if (i-1)%10==0:#每行输出10个 10个换行  
            print('{: >5}'.format(current),end="")  
            print('\n')  
        else:  
            print('{: >5}'.format(current),end="")  
        next=prev+current  
        prev = current  
        current=next  
    return x  
  
fib_loop(20)  
print('--------------\n')  
  
for i in range(1, 21):  
    if i%10==0:#每行输出10个 10个换行  
        print('{: >5}'.format(fib(i)),end="")  
        print('\n')  
    else:  
        print('{: >5}'.format(fib(i)),end="")  

 

小结:可以看出递归方便快速,代码简单,结构逻辑清晰,非常适合在一些特殊问题中求解。 但是递归也可能是造成调用栈的溢出。递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间,这样会造成一定的性能损失。