再帰では、メソッドは自分自身を呼び出します。戻り値がある場合、私はそれに従っていません。たとえば、Chris Pine の「Learn to Program」という本には、階乗に関するこの例があります。
def factorial num
if num < 0
return 'You cant\'t take the factorial of a negative number!'
end
if num <= 1
1
else
num * factorial(num-1)
end
end
メソッドを呼び出すと、コードfactorial(3)
の一部に移動し、else
次のようになります。
3 * factorial(3-1)
6
以来、戻る必要があり3*2=6
ます。再帰内で渡されるメソッドをfactorial(3-1)
呼び出します。、したがってと。factorial
2
num = 2
2 * factorial(2-1)
2*1=2
6
コードを最初に実行して得た はどうなるでしょうか? これで、コードの最後にnum = 1
戻って移動するようになりました。1
しかし、私の理解では、以前の再帰からまだ6
あります。2
を掛けたときに階乗関数を呼び出したので、この仮定は正しいnum
ですか? 誰かがこれをよりよく理解するのを手伝ってくれますか? に電話factorial(10)
したとしましょう。これはどのように機能しますか?