递归打印数字作为对称序列
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);
}
}
}
这不是尾递归,但这是递归比迭代更简单的情况。
如果迭代,则需要两个循环:
- 一个循环从
n
倒数到 1
。
- 另一个循环从
2
到 n
。
然而,使用递归我们可以简单地从 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
而不是继续处理条件保持真实。
我想使用递归函数将输入的数字打印为 对称序列,不带零。
让我们采用一种名为 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);
}
}
}
这不是尾递归,但这是递归比迭代更简单的情况。
如果迭代,则需要两个循环:
- 一个循环从
n
倒数到1
。 - 另一个循环从
2
到n
。
然而,使用递归我们可以简单地从 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
而不是继续处理条件保持真实。