再帰関数について

社内勉強会で再帰関数という言葉が出たので、全く知らなかったので、調べました。

意味

関数の中で自分自身を呼び出すことです。

そのため、再帰関数と呼ばれているんですね。

サンプル

階乗計算が例にあったので、それを使います。

4 x 3 x 2 x 1こんなやつですね。

def factorial(n)
  if n == 1
    1
  else
    n * factorial(n-1)
  end
end

nを入れて、それを-1ずつして、1になったら1を返して、処理を終了させます。

そうじゃない場合は、永遠に自分自身を返すことになります。

ここでn == 1がないと、処理が終わらなくてエラーになります。

:in `factorial': stack level too deep (SystemStackError)
  from effective.rb:2:in `factorial'
  from effective.rb:2:in `factorial'
    from effective.rb:2:in `factorial'
  from effective.rb:2:in `factorial'
  from effective.rb:2:in `factorial'
    from effective.rb:2:in `factorial'
  from effective.rb:2:in `factorial'
  from effective.rb:2:in `factorial'
     ... 8723 levels...
    from effective.rb:2:in `factorial'
  from effective.rb:2:in `factorial'
  from effective.rb:2:in `factorial'
    from effective.rb:5:in `<main>'

処理がミスったらドツボにはまりそうだなって感じがしました。

単語の意味が知らなかったので、簡単な説明になります。