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

来源:互联网 发布:理科生 禅师 知乎 编辑:程序博客网 时间:2024/06/07 00:39

这学期开始了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的过程。

1 0
原创粉丝点击