java函式自己调用自己

public class Recursion {

public static void main(String[] args) {
    new Recursion().run();
}

    public void run(){
    int value = f(3);
    System.out.println(value);
}

public int f(int value){
    if (value == 1) {
    return 1;
    } else {
    return f(value - 1) + 1;
    }
}

}
java编程新手,以上程序是函式自己调用自己,不过我无法理解,求IT大神们解释一下,谢谢大家了。

阅读 7.3k
4 个回答

这是递归运算,关键词给你了 百度解释很多

最后输出的应该是3吧,就是递归运算,进入程序后先调用run()方法,run()调用f()方法并赋参数为3,第一次进f()方法判断语句不成立进else,else继续调用f()并赋值(value -1)也就是3-1 = 2 ,第二次进f()方法判断依旧不成立,继续进else 继续调用f()并给参数 value- 1 此时为2-1 继续进F方法 判断成立 return 1 , 1 + 1 +1= 3

递归相加 1+1+1
main()函数里的new Recursion().run();是初始化匿名函数的调用方法,所以先调用run()函数,得到f(3),再调用f()函数,当 f(3) 时,执行else 语句,return f(2) +1. 在调用一次 f(2) 执行 else语句 此时 返回的是 f(2)=f(1)+1

把你的代码调整成如下格式:

public static void main(String[] args) {
    f(3);
}

private static int f(int value) {
    if (value == 1) {
        return 1;
    } else {
        int ret = f(value - 1) + 1;
        return ret;
    }
}

f(3)最终返回3,函数的调用关系如下:

main
    → f(3)                // f(3) 等于 f(2) + 1 
        → f(2) + 1        // 递进
            → f(1) + 1    // 递进
                → f(1)    // 遇到临界值,即 value == 1
                ← 1       // 返回
            ← 1 + 1       // 回归
        ← 2 + 1           // 回归
    ← 3                   // f(3)返回3
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题