再帰 (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が多く感じる不思議。これは楽しいな。