2017-03-21 19 views
-2

この合計を反復的および再帰的に計算する必要があります。私はすでに繰り返しメソッドを実行しています。しかし、再帰的な方法を理解することはできません。Javaで再帰を使用して(2n-1)の合計を計算する

次のように行くだろう合計:1 + 3 + 5 + 9 + ... + 2N -1

これは、反復1である:

public int dIt(int n) { 
    int sum = 0; 
    for (int i = 1; i <= n; i = 2 * i - 1) { 
     if (i <= 1) { 
      sum += i; 
      i = 2; 
     } else { 
      sum += i; 
     } 
    } 
    return sum; 
} 

それはせずにそれを行うことは可能ですそれぞれの再帰呼び出しでカウンタを運ぶ?つまり、nを使用するだけです。私はそれがnから0まで後方に移動しなければならないと仮定しますが、それをどうやって行うのか分かりません。

私はこの方法のコードがまだないことを知っていますが、私はそれを求めているわけではありません。解決方法を考える方法についていくつかの助けが必要です。

あなたが定義する必要が事前に感謝

+1

申し訳ありませんが、あなたのです宿題;それで、「これはあなたが一般的に再帰を行う方法です」(そして、それはあなた自身を簡単に研究することができるものです)以外に、私たちがあなたに何を伝えてくれると期待していますか? **学習部**は考えています...どのように私はこれをやっていますか?あなたは "簡単な迂回路"に行き、その部分を避けるときに...学ぶために残されているものは何ですか? – GhostCat

答えて

0

1)事例ベース:

if(n==1) return 1 

2)ステップ:

else return (doIt(n-1)) + (2*n-1) 
+0

こんにちは、答えよりも!しかし、反復的な方法と再帰的な方法を使用すると、私は別の結果を得ています。たとえば、n = 20で実行した場合、反復メソッドは35を返し、反復子は400を返します。正しいものは繰り返しです。合計は1 + 3 + 5 + 9 + 17 = 35.問題は何と思いますか?再度ありがとう –

+0

あなたはようこそ。あなたの反復メソッドが間違っていると思います。 n = 20の場合、結果は次のようになります。 39 + 37 + 35 + 33 + 31 + ... + 1 = 400 反復方法では、forは次のようになります。for(int i = 0; i NikNik

+0

こんにちは、返事にはとても長い時間をかけて申し訳ありませんが、学校ではとても忙しかったです。反復の場合、合計は1 + 3 + 5 + 9 + 17 = 35となります。それは奇数の合計ではなく、それは(2n-1)です。あなたが投稿した再帰的なものは、奇数の合計をしていると思います。あるいは、私は運動を正しく理解していないかもしれません。もう一度、私を助けてくれてありがとう! –

-1
public int doIt(int n) { 
    if (n == 1) 
     return 1; 
    else 
     return 2 * n - 1 + doIt(n - 1); 
} 
+0

1.純粋なコードの回答が悪い2. OPは具体的に彼は完全なコードを望んでいないと言った – UnholySheep

関連する問題