新手问题 菜鸟练习题,fibonacci 的不同循环结构实现

moonjourney · 2012年07月22日 · 最后由 toctan 回复于 2013年05月07日 · 3601 次阅读

就是 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 加迭代

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
需要 登录 后方可回复, 如果你还没有账号请 注册新账号