您的位置:首页 > 编程语言 > Java开发

java基础,递归调用的初学总结

2017-03-24 15:11 148 查看
这学期开始了java的学习,在学到递归调用时,有了很大的感触。以下是一个例子以及个人理解。

我个人的理解,递归调用就是把对一个整体的引用(这里解释不太好)或者是拿过来反复利用(???自己糊弄自己的牵强解释)

举个栗子:

public static void main(String[] args){

System.out.println(method1(5));

}

public static int method1(int n){

return n;

}

输出的结果就是5.

分析一下,就是在main函数中,它先执行System.out.println(method(5)); 结果发现method1(5)没法直接输出。就需要执行method1(n)。所以,我个人主观认为,就是把下面的method1(n)拿过来用。

(感觉例子不是很清晰)

下面用递归调用完成从1依次加到7的累加计算,代码如下:

/*递归调用,计算1到n的值*/

public class DiGui{

public static void main(String[] args){ //很正式的开头

int n=7; //很一般的定义

int sum=method1(n); //这里比较重要,把算出的和用sum表示,用method1(n)赋值

System.out.println(sum); //输出sum 表示1到n的和

}

public static int method1(int n){ //这里弄了个新花里胡哨

if(n==1){ //如果进来的n等于1,就直接返回一个1,如果不是1,就走到了万恶的else 返回n并且加上method1(n-1)

return 1; //如果是这样,那就是相当于再次走进了method1(n)方法,只不过这次的n值比上次少了个1.

} //显然我们要再折磨一下这个method1(n),发现n-1还是不等于1,那就再返回n值,但此时的n值比上次少个1

else { //就是n-1,n-1再加method1(n-1)。现在相当于第一次5+4+(4-1)。一直反复折腾到n等于1。n等于1了,就很灵性了,

return n+ method1(n-1); //返回1,并且不需要加method1(n-1)了。那么 整个过程下来就是,5+4+3+2+1=15赋给了sum。 然后终于可以执行

} //System.out.println(sum);了*/

}

}

那么按照这个方法,就可以计算1到n的阶乘了。代码如下:

/*用递归调用计算n的阶乘*/

public class DiGuiJieCheng{

public static void main(String[] args){

System.out.println(method1(5));

}

public static int method1(int n){

if(n==1){

return 1;

}else{

return n * method1(n-1);

}

}

}

上面计算的是1到5的阶乘,运行结果无误。

总体来说,如果用递归调用的方法计算以上内容,比运用for循环的代码量少一些,至于它还有什么更大的作用,目前初学的我还没发现,以后发现了再做详细的书写。

整个过程,其实一直在做一件事,就是需要的函数就整个来执行,整个整个的用。(大概是这样,还是解释的牵强)

附上一张图,结合着“栈”的数据结构,一并解释一下从1依次加到7的过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java初学