就是 fib(i) 零的时候,其值是零 一的时候,其值是一 其他数的时候,其值是 (i - 1) +(i -2)
当然用 case .. when.. else 很好解 但是习题还要求分别用 while, for, times, loop 这四种不同循环结构实现 我想不到
def fib_case(num) case num when 0..1 num else fib_case(num-1) + fib_case(num-2) end end def fib_while(num) while num>1 do return fib_while(num-1)+fib_while(num-2) end num end puts fib_case(10) puts fib_while(10)
其实这个问题根本不需要循环,直接 if else 加迭代
if else
fib 一般解法是迭代.. 不过一楼给的明显是递归,而且没考虑重叠子问题,num 大一点就挂了。 我给个 times 的写法,其他思路都一样:
def fib(num) a, b = 0, 1 num.times do a, b = a+b, a end a end
def fib(n) Hash.new{ |h,k| h[k] = k < 2 ? k : h[k-1] + h[k-2] }[n] end