4方法递归
简而言之就是方法的自身调用。 也可以是方法组自身的调用
-
递归类似循环,可以实现功能的反复执行。在某些(算法)环境下,比使用循环更轻松。
-
递归的本质就是方法的不同调用,就会不同的产生栈帧压栈,栈空间有限,一个逻辑性不合理的递归会导致栈内存溢出(满了),所以递归时我们一般都会有一个结束条件。
public static void t1(){t1();}public static void t2(){t3();}public static void t3(){t2();}
递归公式:要想做a这件事,需要先做b那件事。a和b是一样的事
-
当我们分析程序的时候,如果分析出递归公式,就可以考虑使用递归实现功能
-
如果我们看到了一个使用递归实现的功能,应该可以分析出其对应的递归公式
-
下面是一个使用递归完成1-100累加和的小案例:
class A{public static void main(String[] args){int sum=doSum(100);System.out.println(sum);}//这个方法的作用是算累加和public static int doSum(int max){//按照递归公式,1-100的累加和,我不会算//我只能把当前值和其他数字的累加和算到一起//那么其他数字的累加和谁来算呢?//当前方法能算,我们就用当前数值100加上再次利用调用当前方法得来的99的累加和作为返回值,得 到1-100的累加和//第二次调用该方法时,所计算的就是99的累加和了,那么该方法也不会算//我只能用99加上1-98的累加和了。//我们就要用98作为最大值,来得到1-98的累加和//以此类推,当最大值为1时,我们就肯定知道,它的累加和了,就把它还给上一次调用它的方法,此时2+(1的累加和)就会作为2的累加和被返还到上一次的 3加上2的累加和 以此得到3的累加和传给4+(3的累加和)...//以此类推,这样从最底层开始,层层的累加和我们就都能够得到了//最后99的累加和也会被返还回来//我们就用100+(1-99的累加和)得到1-100的累加和,返回给主方法的调用处if(max==1){return 1;}return max+doSum(max-1);}
}
递归与循环的对比
-
循环一定是一次执行完了, 再执行下一次。
-
递归是一次执行到一半,就执行下一次。等下一次执行完, 这一次还要继续执行。
-
递归不适合捋代码流程。只适合与递归公式碰撞。