Rubyのフィボナッチ数列(再帰)

概要

次の関数を実装しようとしていますが、スタック レベルが深すぎる (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_(Ruby)

あなたは今、多くの解決策にさらされています:)

あなたのソリューションの問題に関して

0 または 1 の場合は n を返す必要があります

最後と次ではなく最後の 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