重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【6/2終了】教えて!goo新規会員登録

参考書の整列のところで、「再帰処理」というものが出てきて、まず整列のところでこれが取り上げられているのが、どんなつがなりがあるのかもよくわからないのですが、一体どうゆうことなのか分かりません。
<5!を求める例>で、本来120なのに、【f(5)】というのが出てきて120とは全然違う式が書いてあり、最終的な答えが1になっているみたいな感じです。

どなたか教えてください。

A 回答 (4件)

再帰関数というのは、関数の定義で自分自身を使っている関数です。

階乗ですと
FACT(N)=N×FACT(N-1)
のように定義します。そうすると、
FACT(5)=5×FACT(4)
で、一つ小さい値での階乗がわかれば計算できます。以下同様に
FACT(4)=4×FACT(3)
FACT(3)=3×FACT(2)
FACT(2)=2×FACT(1)
これを無限に続けては困るので、どこかで止めないといけません。そこで
FACT(1)=1
と定義し、無限に計算が続かないようにします。
上の式で(下から)計算していってみて下さい。FACT(5)=120になることがわかります。
    • good
    • 0

まず整列のところで再帰処理が取り上げられるのは、マージソートが再帰処理で実装しやすいからです。


また、整列アルゴリズムのなかでマージソートは最重要です。シンプルかつ実質的には最速ですから。

再帰処理は他には構文解析や木構造の処理によく使われます。
慣れるとすごく便利な処理方式ですが、注意しないとスタックを浪費することもありますので、再帰処理を繰返処理に置き換えるやり方も学んでおいた方がいいでしょう。
    • good
    • 0

#1さんの回答と組み合わせて見てください。



f(x)といった関数が記載されていますよね?
f(0)=1といったことも書かれていませんか?

f(5)=5*f(5-1)

f(4)=4*f(3-1)

中略

f(0)=1
※#1さんの例では、f(1)=1です。
    • good
    • 0

再帰は理解すると非常に便利です。


5!を例にしますと、
5!=5*4!
=5*4*3!
=5*4*3*2!
=5*4*3*2*1
というふうになります。
これを言葉で書きますと、
if ( in == 1 )
out == 1
else
out == in * 再帰関数( in - 1 )
endif
return out
って感じですかね。
再帰関数では、終端条件を与えておかないと、
無限ループに陥りますので、ご注意ください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!