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

递归的两个关键问题是:

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值