所谓递归,就是逐层求解母问题的子问题。重点是设置递归边界和递归式。
简单举个栗子(即经典例题的第一道):
求f(n) = 1+2+3+4+5+6+7+....n;
子问题是求解f(n - 1), 即f(n) = n + f(n - 1)
同理f(n - 1) = n - 1 + f(n - 2)
....
....
那么问题来了:什么时候停止呢?
由题意可知自变量是不断减小的,总不能无限制的减小吧,根据题意,n的最小值是1,易只f(1) = 1
那么n = 1就是边界
我们可以另n = 3验证一下:
先根据递归式写出所有表达式(这里是为了使问题更明了,事实上只要清楚思路不用写的)
f(3) = 3 + f(3 - 1) = 3 + f(2)
f(2) = 2 + f(1)
f(1) = 1;
等到达边界后,再逐层向上求解:
f(1) = 1;
f(2) = 2 + f(1) = 2 + 1 = 3;
f(3) = 3 + f(2) = 3 + 3 = 6;
因此f(3)的结果就是6
//总结:递归的代码一般不是很长,而且很多复杂的大问题都可以用递归来实现,但是可能思考起来比较绕,希望读者能仔细思考递归的过程。(提醒:递归层数不要太多,否则会爆栈!!!)
//好了,理论知识说完了,几道简单题(保证不难)练练手吧!