递归打印数字作为对称序列

Recursively printing numbers as symmetric sequences

我想使用递归函数将输入的数字打印为 对称序列,不带零。

让我们采用一种名为 void demo(int n) 的方法。

例子

对于 n=5 它应该打印:

"5 4 3 2 1 2 3 4 5 "

问题

我可以打印"5 4 3 2 1 ".

我的递归函数是demo(n-1)所以我可以打印。 当函数达到n=0时,我认为它必须重新设置值。但是我不能在 if 块中写任何东西。

代码

public class demo {

    void demo(int n) {
        if ( n == 0) 
        {
            // tried to write something here         
        }
        System.out.println(n);
        return demo(n-1);   
    }
}

我该如何解决?

这就是我要做的:

public class demo {
    void demo(int n) {
        System.out.println(n);

        if (n > 1) {
            demo(n - 1);
            System.out.println(n);
        }
    }
}

这不是尾递归,但这是递归比迭代更简单的情况。

如果迭代,则需要两个循环:

  1. 一个循环从 n 倒数到 1
  2. 另一个循环从 2n

然而,使用递归我们可以简单地从 n 倒数到 1 并打印每个数字,然后在递归后再次打印该数字。

我发现通常更容易在递归函数的开头直接处理结束条件,然后执行正确的处理。

public class demo {
    void demo(int n) {
        // displays the number once then goes back forward
        if(n <= 1) {
            System.out.print(n + " ");
            return;
        }    
        
        // displays the number once, then all the numbers below it, then again the number
        System.out.print(n + " ");
        demo(n - 1);
        System.out.print(n + " ");
    }
}

我的解决方案基本上是接受的版本的反向版本,但我会说在递归上下文中更清楚地实际处理结束条件 return 而不是继续处理条件保持真实。