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

python编程:函数递归

时间:2017-11-06 20:10:22      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:理解   计算机   函数   导致   就会   递归调用   没有   通过   logs   

函数递归其实没有特定的语法,可以理解为一种思想,我喜欢称他为递归思想

-------------------------------------------------------------------------------------------------------

简单可以理解为:

在函数内部,可以调用其他函数,或者他可以调用自身,这个函数就是递归函数

例子(1):

def func(n):
    n+=1
    if n>=5:
        return ‘end‘
    return func(n)


r=func(1)
print(r)

这就是一个简单的递归思想:

函数func每次运算都自增+1,如果到5就return一个‘end’,反之就return回去继续运算;整个函数都是在调用自身

 

例子(2):

def d():
    return ‘123‘


def c():
    r=d()
    return r


def b():
    r=c()
    return r


def a():
    r=b()
    print(r)


a()

 函数 a 调用 b;b 调用 c ; c 调用 d;d 的返回值为123,然后再依次返回到 a ,这也是一种递归思想

 

例子(3):

下面就是一个递归函数,可以试试

>>> func(1)
1
>>> func(5)
120

def func(n):
    if n==1:
        return 1
    return n * func(n - 1)


r=func(5)
print(r)

如果我们计算func(5),可以根据函数定义看到计算过程如下:
===> func(5)
===> 5 * func(4)
===> 5 * (4 * func(3))
===> 5 * (4 * (3 * func(2)))
===> 5 * (4 * (3 * (2 * func(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算 func(10000)。

 

例子(4):

附上另一种递归用法

def digui(n):
    sum = 0
    if n<=0:
        return 1
    else:
        return n*digui(n-1)
 
print(digui(5))

  

 

python编程:函数递归

标签:理解   计算机   函数   导致   就会   递归调用   没有   通过   logs   

原文地址:http://www.cnblogs.com/zuiziyouran/p/7794660.html

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