再帰 (recursion)
同じことを何度も繰り返したいときにはループを使い、問題の小さい部分が全体の問題に似ているときに再帰を使います。例えば階乗の計算です。
def factorial num if num < 0 return #負の数の階乗計算不可能 end if num <= 1 1 else num*factorial(num-1) end end puts factorial(4) puts factorial(20)
分解脳がすごく必要ですね。階乗とはつまりどういうことということがわからないとだめ。
moomin:ProgrammingRuby tomomi$ ruby recursion.rb 24 2432902008176640000
分かってみるとちょっとなんだかこれすてき!!!
肝はここになるのかな。
else num*factorial(num-1) end
まあなんてシンプル。すばらしい。
おまけ
階乗計算しまくってる。ひゃはーたのしい!
def factorial num if num < 0 return #負の数の階乗計算不可能 end if num <= 1 1 else num*factorial(num-1) end end puts factorial(99)
moomin:ProgrammingRuby tomomi$ ruby recursion.rb 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
へええ99の階乗の下22桁は0になるのんかー。そしてやたら9が多く感じる不思議。これは楽しいな。