2016-03-25 27 views
0

はいこれは宿題です。私は簡単な答えを求めていない、ちょうど正しい方向に動くのを助ける。ここでは代入があります: "aとbの2つの数値を受け取る関数を作成する関数はaとbの間のすべての数値の乗算を計算して返します。この関数の3つのバージョンを作成してください。 私はforループとwhileループを使って関数を作成しましたが、私は割り当ての最後の部分である再帰を使う方法を失っています。再帰を使って与えられた2つの変数間のすべての整数の乗算

+0

コードを投稿してください。 –

答えて

3

これを認めたことは宿題です。それで、私はあなたに答えを与えませんが、私はあなたにそれに向けていくつかの指針を与えます。

再帰関数を書くときに、考慮すべき二つの重要なものがある:再帰を停止して何

  1. 、および
  2. 再帰はあなたのケースでは

を停止するまでのところ、何が起こりますあなたは数字のリストの積を計算しなければなりません。

  1. リストに1つの項目しかないときに機能が実行されますか? (例:aとbが同じ場合)
  2. リストの残りの部分の積で1つの要素を掛けることができますか?

余分なクレジットを探すには、テール再帰をルックアップして、メモリ使用量を抑えることができる理由を理解してください。

これで十分ですか?

0

これは簡単な例ですdynamic programming - まず1つの問題から始め、問題を解決して結果を簡単に組み合わせて解決してください。

通常、これらの問題を後ろ向きに攻撃することができます。最も簡単なケースは何か、すぐに答えることができますか?問題がそれよりも難しい場合はどうしますか?

再帰的解を見つけるように明示的に指示されているように、結果を直接返すか、変更されたパラメータで自身を呼び出す必要があるメソッドを探していると仮定できます。それ自身を得るために。

質問が少し人工的であることを考えれば、文字通り再帰構造を使用してforループを実装してから、既存のforループを直接適用する方法を検討することを検討してください。既存のソリューションを別の方法で表現する方法を検討するだけで、問題を解決するという性質について大きな疑問はありません。

-1
function recursiveMultiplication(num1, num2) { 
    if (num2 == num1) { 
     return num2; 
    } 

    return num2 * recursiveMultiplication(num1, num2 - 1); 
} 
console.log(recursiveMultiplication(5, 8)); 
+0

非常に正直なところ、私は今日再帰を学んだ。必要なのは奉仕と勤勉です。他の人々がこのようにコード化する方法を学ぶと、さらに簡単な形式で問題を分けることができます。D –

+0

http://stackoverflow.com/questions/30589132/recursion-control-flow –

関連する問題