2016-10-20 14 views
-3

私は最近、数学的に意味をなさない再帰の話題になった。この作業では、「99ビール・オブ・ザ・ウォール」の曲を再帰的に印刷する必要がありました。これは、エラーは、プログラムが起こって再帰的サブ構造を認識していないようだということで、私がこれまで持っているもの"Beer Bottles" Recursion Java

public static int bottlesOfBeer(int n) { 
    if (n > 1) { 
     System.out.println(n + "bottles of beer on the wall, " + n + " bottles of beer."); 
     System.out.println("You take one down, pass it around. " + (n-1) + "bottles of beer on the wall."); 
     bottlesOfBeer(n-1); 
    } else { 
     return; 
    } 
} 

です。私はそれがなぜそれを認識していないのか知りたいです。私はこれが宿題であることにも注意しなければならないので、正しい方向へのちょっとした振りは私が尋ねるものです。

+3

"再帰的部分構造を認識できません"とはどういう意味ですか?このコードの出力は何ですか?デバッガでステップバイステップを実行すると、動作は期待どおりに異なりますか? – David

+1

メソッドのシグネチャは、intを返すことを示します。あなたのメソッドでintを返すことは決してありません。 – njzk2

+0

あなたはたぶん 'return 0;'または戻り値の型を 'void 'に変更するべきです –

答えて

0

と思われるエラーは、「再帰的部分構造の認識」ではなく、受信とは関係ありません。メソッド宣言でintが返されていますが、elseにキャッチされた終了条件が何も返されていないので、それは喜んで賭けています。 bottlesOfBeer(int n)メソッドをpublic static void bottlesOfBeer(int n)に再宣言します。私が提案する可能性がある場合、他の人と同様に

+0

これははるかに良いでしょう: – javarookie

0

public static int bottlesOfBeer(int n) 

、問題は最も可能性が高いそれはあなたのコードに示すように、整数を返すメソッドであるという事実に関係しています、コメントで述べています

public static void bottlesOfBeer(int n) 

おそらく、メソッドが数値を返すことを許可するだけです。