递归关键问题(以递归循环打印1~9为例)

来源:互联网 发布:淘宝网店加盟哪家靠谱 编辑:程序博客网 时间:2024/06/16 22:55

递归的两个关键问题是:

1.出口问题,即什么时候结束;

2.逻辑相似性。相似性有时需要主动构造,不能相似的原因可能是缺少参数。

这与循环很相似:

for(int i=0;i<10;i++){    system.out.println(i);}
循环中“i<10”是出口,即循环结束的条件;而“i++”则用于保证逻辑相似性,如果没有“i++”,则循环成了死循环,不停的打印0。

for(int i=0;i<10;){    system.out.println(i);}
对于打印0~9,递归方法如下:如果方法体中“func(i-1)”变成“func(i)”,则情况类似于上面说的死循环。

public static void func(int i){    if(i>0)    //出口问题         func(i-1);  //逻辑相似性     system.out.println(i);}

另外,递归的思想类似于一个多层次的机器,要完成一个任务,当前层只完成一小部分,剩下的任务交给剩下的其他层,这时就要保证逻辑相似性(以便能把任务交给下一层)。

总体看就是每层只完成小部分任务,并把剩余任务交给下一层。


0 0
原创粉丝点击