Java递归思想分析

先举个例子:定义一个 sumByMax(int max)方法,求 1+…+max 的和

这个例子简单的来讲就是将1到max的所有整数都加起来,如果先不考虑用递归,那么这就是一个个重复的累加步骤可以用循环来解决:

public int sumByMax(int max){
        int result=0;
        while(max>=1){
            result+=max;
            max--;
        }
        return result;
}

而如果用递归,可以这样:

public int sumByMax(int max){
        if(max>=2){
            return max+sumByMax(max-1);
        }else{
            return max;
        }
}

对于for或者while循环,只是将重复的步骤利用循环来处理,循环处理完一个步骤后,又进行下一个类似的步骤,关键点是要找出循环的依据和各步骤的相同点(既要循环的部分),什么情况下要继续循环,什么情况下要终止循环,如此例,从1到max有多少的整数就要循环多少次,这就是此例的循环依据,而此例中进行循环的重复操作是累加;
使用递归时,需先找出重复步骤之间的相同逻辑,然后将这些逻辑实现在一个方法中。
递归是在进行一个步骤,进行到某处时,通过调用自身进行分层,在下一层开始紧接着的下一个步骤,
如果下一层不是定义的最后一层,则会在相同的地方再次分层,直到进入最底层,如上例中,max如果
为5,在进行max为5的这一层操作时,将会运行addByMax(4),分层,下一层的max将为4,此时因为定义了max为1时
才为最底层,所以会继续分层,这时max为3,再分,为2,再分,为1,到达最底层,然后
从最底层开始将各层的结果一次向上传递,回归到最顶层,返回最终结果

所以递归时要注意形成一层一层的结构,一般会采取某种判断的方法,如if,如果不满足要求
,那就调用自身进行递归,此时应注意找出上下层之间的联系(各层相同逻辑的部分),让运算进入下一层,
这样形成上一层调用下一层,比如此例中的 max+addByMax(max-1)
最后注意定义一个最底层,即开始向上回归结果的那一层,最底层将不再调用自身进行递归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值