我想显示变量"数字"之前的每个数字。
例如,如果数字是 5,我希望结果是 1 2 3 4 5。我返回值时出错,我不知道为什么。如何使用递归返回结果?
public class SumOfNumbers {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.println("Number?");
int number = keyboard.nextInt();
System.out.println(recursion(number));
}
public static int recursion(int number)
{
for (int i=0;i>number;i++)
{
return recursion(i);
}
else {
return number ;
}
}
}
您正在混合递归和迭代。递归解决方案中不需要for
循环。
把你的递归解决方案想象成它已经存在:如果给你一个程序"打印数字最多n-1
",并且你被要求编写一个打印数字到n
的程序,你会怎么做?解决方案会很清楚 - 你会这样写:
void myRecursiveProgram(int n) {
if (n == 0) {
return; // do nothing
}
printNumbersUpToN(n-1); // Go up to n-1 using the "magic solution"
System.out.println(n); // Complete the task by printing the last number
}
现在观察myRecursiveProgram
是你的printNumbersUpToN
程序,所以你需要做的就是重命名它:
void printNumbersUpToN(int n) {
if (n == 0) {
return; // do nothing
}
printNumbersUpToN(n-1);
System.out.println(n);
}
请注意if (n == 0)
步骤:它非常重要,因为它可以防止递归不停地进入负区域。这被称为递归的基本情况 - 即当你做固定工作量或根本没有工作的情况。
你的代码无法编译,你有一个没有if
else
。
您要做的是这样的:
import java.util.Scanner;
public class SumOfNumbers {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out.println("Number?");
int number = keyboard.nextInt();
recursion(number);
}
public static void recursion(int number)
{
if (number>1)
{
recursion(number-1);
System.out.print(number);
}
else {
System.out.print(number);
}
}
}
这个短代码也将正确打印数字。
public void recursion(int number){
if (number>1)
recursion(number-1);
System.out.println(number);
}