1. ホーム
  2. ruby

[解決済み] Rubyのフィボナッチ数列(再帰)

2022-02-04 13:56:38

質問

次のような関数を実装しようとしているのですが、何度やっても stack level too deep (SystemStackError) というエラーが発生します。

何か思い当たることはありますか?

def fibonacci( n )
    [ n ] if ( 0..1 ).include? n
    ( fibonacci( n - 1 ) + fibonacci( n - 2 ) ) if n > 1
end

puts fibonacci( 5 )

解決方法は?

これを試してみてください

def fibonacci( n )
  return  n  if ( 0..1 ).include? n
  ( fibonacci( n - 1 ) + fibonacci( n - 2 ) )
end
puts fibonacci( 5 )
# => 5

この記事もご覧ください フィボナッチ・ワンライナー

などなど・・・。 https://web.archive.org/web/20120427224512/http://en.literateprograms.org/Fibonacci_numbers_(ルビー)

これで多くの解決策を浴びせられましたね :)

ソリューションの問題点について

を返す必要があります。 n その 0 または 1

そして add 最後の2つの番号ではなく、最後の番号と次の番号

新モディファイ版

def fibonacci( n )
    return  n  if n <= 1 
    fibonacci( n - 1 ) + fibonacci( n - 2 )
end 
puts fibonacci( 10 )
# => 55

ワンライナー

def fibonacci(n)
   n <= 1 ? n :  fibonacci( n - 1 ) + fibonacci( n - 2 ) 
end
puts fibonacci( 10 )
# => 55