我正在尝试编写一个简单的递归程序,它将打印出输入和输入本身之前的所有整数的规范和。例如,输入5应打印出“1 + 2 + 3 + 4 + 5”。输入必须大于零。可以欣赏正确方向的颠簸。
import java.util.Scanner;
public class Quiz10
{
public static void main (String[] args)
{
int input;
System.out.println("Please enter an integer greater than one: ");
Scanner scan = new Scanner(System.in);
input = scan.nextInt();
sumReverse(input);
}
public static void sumReverse(int n)
{
int x = n;
if(x == 1)
System.out.print(x);
else if(x > 0)
{
System.out.print(x + " + " + (x-1));
}
x--;
sumReverse(x);
}
}
编辑:输入为5我当前得到:“5 + 44 + 33 + 22 + 11在线程中出现”主“java.lang.StackOverflowError ...”
答案 0 :(得分:1)
你错过了终止条件。试试这个:
public static void sumReverse(int n)
{
if(n == 1) {
System.out.print(n);
return;
}
else if(n > 0)
{
System.out.print(n + " + " + (n-1));
} else return;
sumReverse(--n);
}
当n点击1或1低于或等于零时,此功能将停止。
另一种选择是:
public static void sumReverse(int n)
{
if(n == 1) System.out.print(n);
else if(n > 0)
{
System.out.print(n + " + " + (n-1));
sumReverse(--n);
}
}
这具有相同的效果。
答案 1 :(得分:0)
由于您没有累积总和,因此无法计算它。最好的方法是返回它:定义一个函数求和直到n并递归调用它。
我会用伪代码给你,因为我知道你更愿意学习而不是完成你的工作:
function sum(int n) -> int {
if x==1 : return 1
else : return n + sum(n-1)
}
然后你会打印sum(n)
。
答案 2 :(得分:0)
你只需要在好的情况下递归。在这里你每次都会递归,所以你得到一个无限循环。
else if(x > 0)
{
System.out.print(x + " + ");
x--;
sumReverse(x);
}
注意我还删除了+ (x - 1)
,因为它将在下一次递归时打印出来。
答案 3 :(得分:0)
public static void sumReverse(int n){
if(n==0)
return;
if(n == 1){
System.out.print(n);
}else if(n > 0)
{
System.out.print(n + " + ");
sumReverse(n-1);
}
}
答案 4 :(得分:0)
return
。+ (n-1)
中的字体中移除else
,您应该没问题。尝试在纸上绘制递归调用,并且您将更好地理解它是如何工作的。
public static void sumReverse(int n)
{
if(n == 1) {
System.out.print(n);
return;
}
else if(n > 0)
{
System.out.print(n + " + ");
}
sumReverse(n-1);
}
答案 5 :(得分:0)
public class Main {
public static String s = "";
public static void main(String[] args) {
int input;
System.out.println("Please enter an integer greater than one: ");
Scanner scan = new Scanner(System.in);
input = scan.nextInt();
String b=sumReverse(input);
System.out.println(b);
}
public static String sumReverse(int n) {
int x = n;
if (x == 1) {
s = "1" + s;
return s;
} else if (x > 0) {
s ="+"+ Integer.toString(x) +s ;
sumReverse(x - 1);
}
return s;
}
}
输出:
Please enter an integer greater than one:
10
1+2+3+4+5+6+7+8+9+10
答案 6 :(得分:0)
想指出一些事情: 这个问题不是通常的递归候选者。 2.如果打算使用递归,最好的办法是将返回值保存为String,最后在main方法中打印,如下所示。 3.声明一个新变量x实际上是不必要的。
public static void main (String[] args)
{
int input;
System.out.println("Please enter an integer greater than one: ");
Scanner scan = new Scanner(System.in);
input = scan.nextInt();
System.out.println(sumReverse(input));
}
public static String sumReverse(int n)
{
String a = "";
if(n > 1)
{
return (n + "+" + sumReverse(n-1));
}
return "1";
}
答案 7 :(得分:0)
public static void sum(int n){
sumReverse(n-1);
System.out.print(n);
}
public static int sumReverse(int n){
if(n==1){
return n;
}
System.out.print(sumReverse(n-1)+"+");
return n;
}