数字递归的总和



我想显示变量"数字"之前的每个数字。

例如,如果数字是 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);
}