码迷,mamicode.com
首页 > 编程语言 > 详细

python递归函数

时间:2018-05-02 11:19:17      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:range   函数   图片   计算机   style   分解   技术分享   lse   代码简洁   

       递归函数简单来说就是函数的自我调用。使用递归函数很多时候可以使得代码简洁,优雅。可以把复杂的问题分解成简单的子问题。递归有无与伦比的魅力,从著名的计算机名言就可以看出递归的奇妙:

To iterate is human,to recurse divine. 
迭代者为人,递归者为神。 
– L. Peter Deutsch

  其实上面这句话有点夸张了,递归不是完美的,它也有致命的弱点,那就是执行效率低,而且容易导致栈溢出(超过一千次)。  

 

 下面我们从一副美妙的图来直观的体会一下递归。

技术分享图片

 

我们用一个简单的实例来比较一下递归和迭代的区别:求N的阶乘

使用迭代的方法如下:

def jiecheng(n):
    result=1
    for i in range(n) :
        result*=(i+1)
    print(%d的阶乘为%d%(n,result))

jiecheng(
5) #5的阶乘为120

 

使用递归的方法如下:

def jiecheng(n):
    if n==1:
        return 1
    else:
        return n*(jiecheng(n-1))

 

可以看出使用递归可以让代码更加简洁优雅,更加具有数学美。

 

下面再通过斐波那契数列来探讨一下递归:

1、通过循环实现:

 

a=0
b=1
while b < 100:
    print(b)
    a, b = b, a+b

 

 2、普通递归实现斐波那契数列:

1 ls=[]
2 for i in range(10):
3     if i==0 or i ==1:
4         ls.append(1)
5     else:
6         ls.append(ls[i-2]+ls[i-1])
7 print(ls)  #[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

 3、通过尾递归方式实现:

def fbnq(n,a,b):
    if n==0:
        return (b)
    else:
        return fbnq(n-1,b,a+b)
print([fbnq(i,0,1) for i in range(5)])

 这三种方法迭代效率其实是最高的,然后

python递归函数

标签:range   函数   图片   计算机   style   分解   技术分享   lse   代码简洁   

原文地址:https://www.cnblogs.com/linshuhui/p/8978086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!