1

入力と入力自体の前にあるすべての整数の標準的な合計を出力する単純な再帰プログラムを作成しようとしています。たとえば、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 + 11Exception in thread "main" java.lang.StackOverflowError...」

4

8 に答える 8

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 が 0 以下になると停止します。

別の方法は次のとおりです。

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

これは同じ効果があります。

于 2013-03-31T08:34:28.097 に答える
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
于 2013-03-31T08:38:31.827 に答える
0

合計を累積しないため、計算できません。最善の方法はそれを返すことです: n まで合計する関数を定義し、それを再帰的に呼び出します。

あなたが自分の仕事を終わらせるよりも学ぶことを好むことを理解しているので、私はそれを疑似コードであなたに与えます:

function sum(int n) -> int {
     if x==1 : return 1
     else : return n + sum(n-1)
}

次に、印刷しますsum(n)

于 2013-03-31T08:34:18.133 に答える
0

良い場合にのみ再帰する必要があります。ここでは毎回再帰するため、無限ループが発生します。

    else if(x > 0)
    {
        System.out.print(x + " + ");
        x--;
        sumReverse(x);
    }

+ (x - 1)次の再帰で出力されるため、 も削除したことに注意してください。

于 2013-03-31T08:34:37.710 に答える
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;
}
于 2013-03-31T08:49:08.350 に答える