递归定义的原理就是数学归纳法,这在数学上有定论,google一下就明白。具体叙述可参考Terence Tao的《Analysis》第2章,中译本《陶哲轩实分析》。另外我觉得Carnegie Mellon大学的ML语言讲义里有一句话很经典:
when programming recursively, think inductively
起点终点不过是你人为的划分,而且你说的递归终点实际就是数学归纳法的起点。递归的终点跑到起点,和数学归纳法的起点到终点是一回事。如果非要执着于起点终点之分,把递归写成bottom-up就是了。比如1+2+...+100的bottom up写法:
- public int getSum(int n, int end, int sum) {
- if (n > end)
- return sum;
- else
- getSum(n + 1, end, sum + n);
- }
复制代码
|