2012-02-10 24 views
0

私はC++プログラミングの新人です。しばらく前に、私は再帰関数の学習を始めました。だから私の質問は、再帰でこれを行うことができますか?3回の再帰呼び出しを1行で呼び出しますか?

u(n)=n*u(n-1)+(n+1)*u(n-2)+n 
+0

短い答え:はい。エンドポイントは何ですか? (再帰はどのように終了するのですか?) – Mysticial

+4

再帰関数は魔法ではありません。それらは、一部の(すべてではない)ケースで自分自身を呼び出すような機能です。あなたが好きな場所に電話してください。 –

答えて

0

はい、ベースケースを正しく取り扱えることが条件です。その機能は完全に定義されていません。u(0)u(1)の値を明示的に指定する必要があります。関数は二回(n-1n-2付き)、およびない三回あなたの質問示唆のタイトルとして自分自身を呼び出すこと

注意。

また、この特定のケースでは、再帰は不要であり、最適ではありません。直近の2つの数値を保持するために2つの変数を使用し、繰り返し実行することができます。さまざまなアプローチについては、ICS 161: Design and Analysis of Algorithms: Fibonacci Numbersを参照してください。機能的なフォームは異なっていますが、すべての議論があなたの機能に当てはまります。

+1

彼はたぶん彼が1つの「u」を失っているかもしれない:u(n)= n * u(n-1)+ ** u **(n + 1)* u(n-2)+ n – LihO

+3

@LihO:残念な再帰呼び出し。 –

+0

はい、そうです!ミスミス。 –

3

はい、実行できますが、指数関数的に複雑になります。より良い方法は、ボトムアップを計算し、進むにつれてuのより低い値をキャッシュすることです。

+0

私はそれも考えましたが、私は骨抜きです。答えに感謝します。 –

関連する問題