Python学习笔记(七)—递归函数

-1. 什么是递归

 - 递归函数即自调函数,在函数体内部直接或间接的调用自己

-2. 递归的理解

 - 举例说明:阶乘计算
    def factorial(n):
        if n <= 1:
            return 1
        return n * factorial(n - 1)
如何来验证函数是否正确,Paul Graham提到一种方法
    ①当n=0, 1的时候, 结果正确.
    ②假设函数对于n是正确的, 函数对n+1结果也正确.
如果这两点是成立的,我们知道这个函数对于所有可能的n都是正确的。

-3. 使用递归

当我们理解递归过后,就要开始使用了,关于如何使用,Paul Graham提到, 你只需要做两件事情:
    ①你必须要示范如何解决问题的一般情况, 通过将问题切分成有限小并更小的子问题.
    ②你必须要示范如何通过有限的步骤, 来解决最小的问题(基本用例).
如果这两件事完成了, 那问题就解决了. 因为递归每次都将问题变得更小, 而一个有限的问题终究会被解决的, 而最小的问题仅需几个有限的步骤就能解决.
一个 汉诺塔 例子:
    我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:
    如果a只有一个圆盘,可以直接移动到c;
    如果a有N个圆盘,可以看出a有1个圆盘(底盘)+(N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将 a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。
def move(n, a, b, c):
    if n == 1:
        print a, '-->',  c
        return
    move(n-1, a, c, b)
    print a, '-->', c
    move(n-1, b, a, c)    
move(4, 'A', 'B', 'C')
在此例中,基本用例:当有1个圆盘在A上, 我们直接把圆盘移动到C上即可.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值