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