java - 1 2 3 最后是怎么来的?

标签 java recursion

在这个程序中,如果用户输入数字3,则o/p会是 3 2 1 1 2 3 ,我明白3 2 1是怎么来的,但是最后没明白1 2 3是怎么来的.

class GFG{ 
static void printFun(int test) 
{ 
    if (test < 1) 
        return; 
    else
    { 
        System.out.printf("%d ",test); 
        printFun(test-1); // statement 2 
        System.out.printf("%d ",test); 
        return; 
    } 
} 

public static void main(String[] args) 
{ 
    int test = 3; 
    printFun(test); 
} 
}

最佳答案

跟踪递归函数的一种方法是展开每个递归调用,如数学表达式。

首先我们开始

printFun(3)

扩展为:

print(3) // I have shortened System.out.printf here to just "print" to remove the noise
printFun(2)
print(3)

我们还有一个递归调用 (printFun(2)),所以让我们扩展它。

print(3)
print(2)
printFun(1)
print(2)
print(3)

继续扩展:

print(3)
print(2)
print(1)
printFun(0)
print(1)
print(2)
print(3)

最后一次(因为 printFun(0) 没有做任何事情,我们只是将其删除):

print(3)
print(2)
print(1)
print(1)
print(2)
print(3)

哦,看!这将产生输出 3 2 1 1 2 3!

关于java - 1 2 3 最后是怎么来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56714733/

相关文章:

java - 从java中的arrayList打印数组

使用 DefaultModel 不显示 Java JTable 列标题

java - Java中递归生成树

c - 在递归实现之前执行迭代函数

反转两个边界之间数组索引顺序的 C++ 递归函数

java - 在 swing 中打开一个新框架后无法使用按钮关闭框架

java - Android异步HTTP库: How to store value from onSuccess method?

java - 简单的 ServiceLoader - java.util.ServiceConfigurationError ... 提供者 ... 未找到

python - 递归列表函数

javascript - 递归阶乘函数如何知道何时停止