你不知道的:递归

递归是一种编程方法,形式上看是函数自己调用自己,直到问题解决,如下所示。
递归
递归问题,也可以用循环的方式解决,如下所示
循环
使用循环,程序的性能可能更高;使用递归,程序可能更容易理解。递归的主要目的是让实现算法的形式更加优雅,性能上的提升不多。请参考欧几里得算法,体验什么是优雅。

欧几里得算法:gcd(a,b) = gcd(b,a mod b)

每个递归函数都有两个部分:

  • 基线条件(base case):函数不在调用自己,避免形成无限循环
  • 递归条件(recursive case):函数调用自己,每次递归调用,都必须使问题的规模缩小

使用递归函数,相当于把当前为解决的问题压栈;每次调用自己的时候,在调用位置把当前变量压栈,直到遇到基线条件,不再压栈,然后不断返回处理的结果,最终把问题解决。
假设一个问题,可以用压栈的模型来解决,那么,可以用递归的形式实现算法。递归让代码更加简洁,却会引入压栈的开销,因为每次调用自己,计算机都会在栈空间申请一块内存,保存当前的变量。
递归的本质就是用压栈与出栈操作,在递推过程中压栈,遇到基线条件后,在会归过程不断出栈,最终完成问题的解决。递归=递推+回归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值