首页 > 编程语言 > 详细

python之旅Day6——递归

时间:2018-06-16 22:23:14      阅读:210      评论:0      收藏:0      [点我收藏+]

一、递归的常规格式 

def test(n):                    #一般来说,都是对test(n)函数的参数进行改变,才会有递归的产生
    if 对n的条件:               #首先确定递归函数的结束调节,当满足条件时,返回所期望的最终值
        retrun result
    
    对n进行相应的赋值操作         #当条件不满足时,则对参数进行处理,以缩小范围,减小问题规模
    test(new_n)                   #自身调用自身,实现递归

  注意:使用递归时,要确保test(n)和test(new_n)所执行的过程完全一致。

 

二、递归函数的运行过程

def calc(n):
    print(n)

    if int(n/2) == 0:
        return n

    res = calc(n/2)
    return res

calc(5)

 

技术分享图片

从上图可以看出,只要参数n除以2得到的伤不等于零时,就会将商作为calc()函数的参数再次调用函数。再此过程中,上一层的函数其实并没有结束,最后一句的return res是到最后得出结果后,一层一层向上传入的。所以说明递归的运行占用内存很大。

 

三、汉诺塔是实现

def haino(n, x, y, z):
    if n == 1:
        print(x, "->", z)           #最终期望x轴上只有一个盘,最后放到z轴上
    else:
        haino(n - 1, x, z, y)        #将除最后一个盘外的所有盘,从x轴放到y轴上
        print(x, "->", z)           #这样,就能将最后一个盘,从x轴放到z轴上
        haino(n - 1, y, x, z)        #将剩下的盘从y轴借助x轴放到z轴上


haino(3, "x", "y", "z")

x -> z
x -> y
z -> y
x -> z
y -> x
y -> z
x -> z

  

 

python之旅Day6——递归

原文:https://www.cnblogs.com/b939524101/p/9191551.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!