2

フィボナッチ数列の n 番目の要素を返すメソッドを作成していますが、予期しない終了エラーが発生します。

def fib_seq(n)

  a = [0]

  n.times do |i|
    if i==0
      a[i] = 0
    else if i==1
      a[i] = 1
    else
      a[i] = a[i-1] + a[i-2]
    end  
  end

  return a[n]
end

puts fib_seq(4)

私が台無しにすることができるものについてのヒントはありますか?

4

3 に答える 3

4

n 番目 ((n-1) 番目で​​はなく、つまり fib(1) = 0 NOT fib(0) = 0) を返そうとしていると仮定します。

変更して修正しました:

else if i==1

elsif i==1

(と)

return a[n]

return a[n - 1]

したがって、最終的なコードは次のようになります。

def fibSeq(n)

  a = [0]

  n.times do |i|
    if i==0
      a[i] = 0
    elsif i==1
      a[i] = 1
    else
      a[i] = a[i-1] + a[i-2]
    end  
  end

  return a[n-1]
end

puts fibSeq(4)

以下のコメントによると、次のコードが機能します。

def fibSeq(n)

  a = [0]

  (n+1).times do |i|
    if i==0
      a[i] = 0
    elsif i==1
      a[i] = 1
    else
      a[i] = a[i-1] + a[i-2]
    end  
  end

  return a[n]
end

puts fibSeq(4)

fibs をリストとして出力する場合は、次を使用します。

return a[0..n]

それ以外の

return a[n]
于 2012-09-20T00:17:08.477 に答える
1

再帰的に行う場合、これはseudo-codeです:

fib(n) {
    if n = 0 -> return 0
    else if n = 1 -> return 1
    else -> return fib(n-1) + fib (n-2)
}
于 2012-09-20T00:17:55.957 に答える