(原创)递归

一、递归的核心在于基线条件递归条件

例如:下面是一个由1加到n的函数:

def add_self(n):
    if n<=1:
        return n
    else:
        return n+add_self(n-1)

其中,第二行的if就是基线条件,else就是递归条件。


二、调用栈

递归在计算机的内部的实现是通过调用栈实现的。当函数进入递归,调用第二个函数的时候,第一个函数暂停状态且处于未完成的状态,该函数的所有变量的值都还存在内存当中。此时,栈的高度+1,变为2(此时已经进入第二个函数)。这个用于存储多个函数的变量的栈,称做调用栈。注意,各个栈之间的变量名虽然可能相同,但是互不相关,且栈之间的变量不能相互调用与访问。当到达基线条件之后,递归将沿着调用栈返回,意味着后最后压入的栈,将最先弹出。(栈有两种操作:压入与弹出


三、与循环对比

通常,很多递归能完成的算法,循环也可以完成,例如上述1加到n的函数,用循环实现:

def add_self(n):
    total=0
    while n>=0:
        total+=n
        n-=1
    return total

事实上,循环的效率比递归要来的高。虽然递归使用方便且便于理解,但是当每个栈存储的信息过于详细,或者栈的高度过高时,将占用极大的内存,对于这种情况,我们可以:
1.重新使用循环进行编码
2.使用尾递归

(后面我们在来探讨尾递归)

转载请注明出处!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值