java - 无法理解 java 回文输出

标签 java recursion

我有一个简单的 java 程序,它接受一个数字并根据该数字执行一个函数。

public class Palidrome {
public static void main (String[] args) {
    int N = 3;
    System.out.println(palidrome(N));
}

public static String palidrome(int i) {
    if (i == 0) return "S";
    if (i == 1) return "T";
    return palidrome(i-2) 
            + palidrome(i-1)
            + palidrome(i-2);
    }
}

所以对于这个例子 N = 3,输出是“TSTST”。如果将 N 更改为 5,则输出为“TSTSTSTSTSTSTSTSTSTSTST”等。

我正在努力弄清楚为什么会这样。如果 N = 5,palidrome(i-1) 和 palidrome(i-2) 将永远不会到达 (i == 0) 或 (i == 1),所以理论上什么都不应该返回?

提前致谢!

最佳答案

这个可以通过画递归树来理解。

                                            palindrome(5)
                                         /        |         \   
                            palindrome(3)     palindrome(4)  palindrome(3)
                           /     |        \  ............................
                          /      |         \
              palindrome(1)   palindrome(2)  palindrome(1)
                             /     |       \
                            /      |        \
              palindrome(0)  palindrome(1)  palindrome(0)

因此 palindrome(5) 最终会到达 palindrome(0) 和 palindrome(1) 调用。
注意:递归在 palindrome(0) 和 palindrome(1) 调用结束。

关于java - 无法理解 java 回文输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37531065/

相关文章:

java - Java 中是否有任何用于原始套接字的 API,示例也会有所帮助

bean 构造函数中的 Java 值注入(inject)

java - 如何查看 FirestoreRecyclerAdapter 是否为空?

javascript - 试图了解JavaScript中for循环内的递归

java - 将二叉树的所有路径打印为 0 和 1 的字符串

Java swing java.lang.IllegalStateException

java - 如何保存我的 Android 应用程序,以便最终用户无需 Android SDK 即可执行它

java - 检索文件夹和子文件夹以使用尾递归在 Java 中读取文件

java - 在java中实现快速排序时的无限循环/递归

java - 如何改进已经是 O(n) 的递归排序算法?