0

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

让我们采用一个名为 的方法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);   
    }
}

我该如何解决?

4

2 回答 2

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. 另一个循环从2到计数n

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

于 2016-01-05T01:58:34.067 回答
0

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

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 + " ");
    }
}

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

于 2022-01-07T08:56:06.863 回答