我试图实现以下功能,但它不断给我堆栈级别太深(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
检查这个帖子也是Fibonacci One-Liner
更多.. http://en.literateprograms.org/Fibonacci_numbers_(Ruby)
你现在已经被许多解决方案轰炸了:)
关于问题在解决方案
你应该返回n,如果它的0或1
并添加最后两个数字不是最后和下一个
New Modified version
def fibonacci( n ) return n if n <= 1 fibonacci( n - 1 ) + fibonacci( n - 2 ) end puts fibonacci( 10 ) # => 55
One liner
def fibonacci(n) n <= 1 ? n : fibonacci( n - 1 ) + fibonacci( n - 2 ) end puts fibonacci( 10 ) # => 55