python递归怎么理解_理解递归-python

几个小例子来理解递归

一、 先来一点基础的认识:

1、递归是一个不断的将一个问题分成更小的子问题最终找到一个简单的基础问题,最后再由基础问题的解决逐步向上解决初始问题的过程。所以不难看出,递归其实是分为两部分的一个是向下的递推过程,另一个就是向上的回溯过程。

2、从上面我们已不难发现,在这个过程中,是存在着栈的先进后出的过程的。而二者的关系就是在调用函数的时候,python会分配一个栈帧来处理该函数的局部变量。当函数返回时,返回值就在栈的顶端,以供调用者访问。

这里需要注意的是:栈帧限定了函数所用变量的作用域。尽管反复调用相同的函数,但是每一次调用都会为函数的局部变量创建新的作用域。

形式上就是函数的自我调用。

3、那么如何去分析一个问题是否能够用递归的方法来解决,这就涉及到了递归三原则。

1)递归必须有基本情况。能够结束递归

2)递归算法必须能改变其状态向基本情况靠近

3)递归算法必须递归调用自己

二、上一点生动的栗子

这是一个最简单的递归过程了。但是却是属于麻雀虽小五脏俱全。

首先if语句,基本条件判定。

第4行,自我调用,这是后就建立了栈帧逐个存储stack[3,6,9,12,15,18]【右边是栈底】

第5行,print函数,直观地展现回溯过程。

def digui(n):

if n < 1:

return False

digui(n-3)

return print(n)

digui(18)

再来一个有点难度的,四柱汉诺塔,更多递归的栗子可以看那两篇第

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值