java - 有人可以帮助我理解递归吗?

标签 java recursion

所以我要在类里面复习递归,但我似乎无法理解它。有什么建议可以帮助描述这个过程吗?

来 self 正在做的样本测试:

class Q4
{
    public static void main(String[] args)
    {
        f(3);
    }
    public static void f(int x)
    {
        if (x > 0)
        {
            System.out.println(x);
            f(x-1);
            System.out.println(x);
            f(x-1);
        }
        System.out.println("bert");
    }
}

我看到了输出,但我不明白为什么它是输出。 谢谢

最佳答案

思考递归的一个好方法是从基本情况开始,然后看看当您一次一个地应用递归步骤时会发生什么。

基本情况:f(0)

这里的基本情况是 x <= 0 . f(0) 的输出是什么?我们可以立即看到这一点,因为 if永远不会输入语句。基本情况输出是:

bert

递归步骤:f(1)

现在让我们看看 f(1) 会发生什么.当x是 1 代码输入 if语句并最终调用 f(0)两次。如果你替换 1对于 x在函数体中,您会看到执行了以下语句:

System.out.println(1);
f(0);
System.out.println(1);
f(0);
System.out.println("bert");

很明显 println 是什么语句可以,但是两个 f(0) 呢?电话?好吧,我们知道什么f(0)打印是因为我们已经分析了基本情况。 f(0)版画 bert .所以上面几行的输出是:

1       // System.out.println(1);
bert    // f(0);
1       // System.out.println(1);
bert    // f(0);
bert    // System.out.println("bert");

递归步骤:f(2)

如果您对 f(2) 应用相同的分析,你会看到它执行:

System.out.println(2);
f(1);
System.out.println(2);
f(1);
System.out.println("bert");

如果我们代入 f(1) 的输出在f(1)的两个地方被调用,我们得到:

2       // System.out.println(2);
1       // f(1);
bert
1
bert
bert
2       // System.out.println(2);
1       // f(1);
bert
1
bert
bert
bert    // System.out.println("bert");

递归步骤:f(3)

最后,f(3)执行:

System.out.println(3);
f(2);
System.out.println(3);
f(2);
System.out.println("bert");

代入 f(2)的输出,我们得到:

3       // System.out.println(3);
2       // f(2);
1       
bert
1
bert
bert
2       
1       
bert
1
bert
bert
bert    
3       // System.out.println(3);
2       // f(2);
1       
bert
1
bert
bert
2       
1       
bert
1
bert
bert
bert    
bert    // System.out.println("bert");

关于java - 有人可以帮助我理解递归吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20500550/

相关文章:

java - 提供了 kafka schema.registry.url 但不是已知的配置

java - Dagger2 基础 - 场注入(inject) - 不工作

java - GNUmakefile无法编译bison和flex程序

JavaScript 递归

.htaccess - 重定向模式文件避免递归循环

java - 当 Java 方法需要 Reader/Writer 参数时,是否可以避免使用临时文件?

java - 如何将 JTable Vector 转换为 JTable ArrayList?

java - 有人可以帮我这个骑士的旅游代码吗?

python - 如何使用初始值递归地将参数输入到此函数中?

javascript - 使用递归数组递归组件加载