derezzed

导航

python之递归

python之递归

大多数情况下,我们见到的是一个函数调用其他函数。除此之外,函数还可以自我调用,这种类型的函数被称为递归函数。

递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。

在使用递归时,需要注意以下几点:

  • 递归就是在过程或函数里调用自身
  • 必须有一个明确的递归结束条件,称为递归出口。

注意: 切勿忘记递归出口,避免函数无限调用。

 

典型的算法:

大多数学过数学、计算机科学或者读过编程相关书籍的人,想必都会遇到阶乘:

n! = 1 × 2 × 3 × … × n

也可以用递归方式定义:

def func(x):
    if x == 1:
        return 1
    return x*func(x-1)
'''
def func(3):
    if x == 1:
        return 1
    return 3*func(3-1)      3*2*1
    
def func(2):
    if x == 1:
        return 1
    return 2*func(2-1)      2*1
    
def func(1):
    if x == 1:
        return 1            1   
    return x*func(x-1)        
'''
ret = func(3)
print(ret)

还可以用:

n! = (n-1)! × n

其中,n >= 1,并且 0! = 1。

由于简单、清晰,因此其常被用作递归的示例。

PS: 除了阶乘以外,还有很多算法可以使用递归来处理,例如:斐波那契数列、汉诺塔等。

迭代实现:

相比递归,阶乘的迭代实现更容易理解:

def fun2(x):
        result = 1
        
        for i in range(2,x+1):    #因为第一次乘的时候result已经是1了 所以从2开始
            result *= i
        return result


ret2 = func(3)
print(ret2)

开始时,result 为 1,进入 for 循环,对之前的结果累积乘以 i,直至 n。

 

补充:

 

posted on 2018-01-08 16:14  derezzed  阅读(239)  评论(0)    收藏  举报