2017-04-14 15 views
1

これは質問1です。整数を別の整数で除算して答えを返す再帰的な解法を書いてください。あなたの再帰関数divide終了条件を持っていないと、常に自分自身を呼び出しますので、例えば7分の35 = 5この再帰の例はどのように動作しますか?私はスタックオーバーフローエラーを取得し続ける

public class Division 
{ 
    public static void main(String[] args) 
    { 
     int a = 10; 
     int b = 5; 
     int answer = divide(a,b); 
     return; 
    } 

    private static int divide(int a, int b) 
    { 
     int answer = a/b; 

     return divide(a,b); 
    } 
} 
+1

第5

のような何かであるように、負になりましたメソッドの "停止条件"にする必要があります。これは、メソッドが再帰的に呼び出しを停止し、再帰的な結果を返さない条件です。次に、除算を使用せずに除算を実装する方法について考えてみましょう。 –

+0

また、再帰に関するもう1つの重要なこと - 再帰呼び出しの前に何らかの形で引数(少なくとも1つ)を変更する必要があります。そして、この変更により、各ステップで停止条件に近づくはずです。再帰はある時点で終了する可能性があります。 –

答えて

0

あなたは、スタックオーバーフローエラーを取得しています。良好な再帰関数には、自己呼び出しを中断する終了条件があります。

私はあなたがそれの前に6 回を減算する必要があり

35 
- 6 = 29 
    - 6 = 23 
      - 6 = 17 
       - 6 = 11 
        - 6 = 5 - 6 = -1 

、たとえば6分の35のためのように...質問はあなたが負の値に達するまでの結果からbを差し引くと関係していると思います答えは、...あなたは再帰を使用し、通常は非常に最初のLIN

private static int divide(int a, int b) { 
    if (a - b < 0) { // or simply (a < b) 
    return 0; 
    } 

    return divide(a - b, b) + 1; 
    // +1 because I needed to count the number of times 
    // I've subtracted b from the running value. 
} 
+0

'if(a

+0

ありがとう、正しい!否定的な条件を使用して_gettingのアルゴリズムを説明して、それが負の値になっているところにしたいと思っていましたが、コメントとして追加しました:) – Gabe

関連する問題