递归,就是在运行的过程中调用自己。
构成递归需具备的条件:
- 子问题须与原始问题为同样的事,且更为简单;
- 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
我在刚开始解决递归问题的时候,总是会去纠结这一层函数做了什么,它调用自身后的下一层函数又做了什么,把实现一个递归解法想的十分复杂。其实挺简单的,要跳出刚才这个思维误区,递归就是在运行的过程中调用自己。那么就是说它每一级的功能都是一样的,所以我们只需要关注一级递归的解决过程就可以了。 - 找整个递归的终止条件:递归应该在什么时候结束?
- 找返回值:应该给上一级返回什么信息?
- 本级递归应该做什么:在这一级递归中,应该完成什么任务?
递归的典型例子是数字的阶乘。
数字 N 的阶乘是 1 到 N 之间所有整数的乘积。
例如 3 的阶乘就是 1×2×3。
我们来以题目作为例子
问题:“假定一对大兔子每月能生一对小兔子,且每对新生的小兔子经过一个月可以长成一对大兔子,具备繁殖能力,如果不发生死亡,且每次均生下一雌一雄,问一年后共有多少对兔子?”
解决方法: