Java-Working of Recursion没有任何return语句?

时间:2015-09-05 15:36:48

标签: java recursion

请解释递归方法的工作原理?  这意味着调用堆栈的工作

class rec
{
    public static void func(int i)
    {
        if (i>=1)
        {
            System.out.println(i);
            func(i-1);
            System.out.println(i);
        }
    }

    public static void main(String args[])
    {
        func(5);
    }
}

2 个答案:

答案 0 :(得分:1)

这种递归可以在不进入无限“循环”的情况下运行,因为在每次递归调用中i值都会减少 - 一个更大的问题会被分解为更小的问题,直到它最终被解决。

首先你传入5,它满足条件,再做一次递归调用:

func(5) --> func(4)

你传入4,它满足条件,再做一次递归调用等等:

func(5) --> func(4) --> func(3) --> func(2) --> func(1)

当方法完成任务时,返回调用点,从而开始从堆栈中弹出。

print(1) --> print(2) --> print(3) --> print(4) --> print(5) --> back to main().

如果您更正了错误,您就可以运行并产生以下结果:

5
4
3
2
1
1
2
3
4
5

回复您的评论:它可以显示5432112345,因为您在方法中执行了System.out.println!您无需返回值即可打印这些数字。

答案 1 :(得分:1)

enter image description here

我为您制作了流程图,以便您很好地理解它! , 我给了输入 4 。

这里是所有的代码,但是你要知道最后有一个return语句,如果你不写return,你理解就好了。

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

public static void func(int i) {
    if (i >= 1) {
        System.out.println(i);
        func(i - 1);
        System.out.println(i);
    }
    return;
}