• ベストアンサー

再帰呼び出し

C++のクラスで n!=n(n-1)(n-2)...1 n!を求めるprogramを作らなくてはならないのですが 再帰を使わずに、関数factorial(n)を使わないといけません。 ちんぷんかんぷんです。 for(counterとcounter--を使った)物しか思いうかびません。 関数factorial(n)を使うというのはnに戻るつまり再帰というふうには ならないのですか? 関数と再帰の意味を漠然としかわかっていないのですが。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

C++は知りませんがC言語の知識で。 factorial関数を使うなら簡単ですね。k=factorial(n) これでNの階乗がkに入るはずです。 再帰処理は、関数の中でやっているかもしれません。 再帰処理を簡単に説明すると、factorialの中でfactorialを使うというような奇妙な組み方です。 もう少しわかりやすく言うと、10!を計算するように言われたとき10を横にどけて9!を計算するように自分自身に命令しなおします。これを繰り返していくと最後は1!=1を計算することになります。 後は逆向きに戻りながら掛け算をしていき、最後に10!が求まります。 ところで、factorialは自分で組むのですか?

その他の回答 (1)

noname#30727
noname#30727
回答No.2

まるで、なぞなぞのようです。 階乗(factorial)のプログラムを作るのならば、factorial(n)を使わないといけないという意味がわからないし、クラスの設計力を試されているのなら、あえて再帰という言葉を使う意図がわかりません。 「何を作るのか」という事をはっきりさせた方がいいですよ。 関数の説明は省略しますが、再帰というのは、以下のように、関数が自分自身を呼び出している状態をさします。 int factorial(int n) { if (n > 2) n *= factorial(n - 1); return n; }