递归

递归是一个让人又爱又恨的算法,为什么这么说呢?如果理解递归的话,就会觉得这代码写的真简洁,而且简答易懂,对于不理解递归的人来说,这是什么啊?天书?我怎么推导不出来结果是什么?
对于视性能如命的人来说,他们不愿意用递归,因为循环的性能比递归更好。正如Leigh Caldwell说过一句话:“如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。”
很多算法都用了递归,所以理解递归的概念很重要。
废话就说到这里,下面开始正式介绍递归。
递归,说白了就是运行过程中调用自己。举个最简单的例子,我们都会使用电脑,在电脑里都存在文件系统,文件系统包括了文件夹和文件。文件夹里包含文件,也可以再包含文件夹,里面的文件夹又包含文件或文件夹......无限制的循环下去。如果有个需求:需要查询一下某个目录下的所有文件及文件夹,这时如果使用循环的话,你可能就觉得有些棘手。因为不知道具体有基层目录,所以for循环不知道要写几次,这是递归就可以很好的解决这个问题。
编写递归时,一定要注意基线条件和递归条件,否则,没有设置基线条件的话,递归程序可能会成为无线循环执行程序。
举个简单的例子,我们实现一个数字的递归输出:
def countNum(i):   #数数字,数字递归
    print(i)
    countNum(i-1)
countNum(9)

输出结果为

9
8
7
6
5
4
3
2
1
0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
... ...  以下内容省略,因为无休止的执行下去
def countNum(i):
    if i > 0:  # 加个基线条件,程序变不会无休止的执行
        print(i)
        countNum(i-1)
countNum(9)

下面的程序对递归加了基线条件后,程序在i =0的时候终止。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值