1000位数字斐波那契 - Euler上的错误



以下是我的代码。它运行。有用。问题是,第一个1000位数字斐波那契号的索引不是4872 ...它是4871。4872是位置,而不是索引。欧拉是否接受错误的答案,还是在应该使用位置时使用索引一词?

def fib_of_a_certain_digit(num)
    fibs = [1, 1]
    idx = 1
    while true 
      fib = fibs[idx] + fibs[idx-1]
      fibs << fib
      idx += 1
      digilength = fib.to_s.split("").length
      return "The first #{num} digit Fibonacci number is at index #{idx}, the fibonacci array is #{fibs.length} long" if digilength == num
     end
end
puts fib_of_a_certain_digit(3)
puts fib_of_a_certain_digit(1000)

这是输出。前3个数字斐波那契号在索引11处,斐波那契数组长12第一个1000位数字斐波那契号为索引4781,斐波那契数组为4782长

您可以看到,控制案例与已知数据匹配。[1、1、2、3、5、8、13、21、34、55、89、144]数组中的最后一个数字为144。在索引11处,但是数组中的第12个数字。相同的原则适用于较大的数字(在这里太大,太大了)。它在阵列的最后一个位置(4872),其索引为4871。

为什么没有人注意到这一点?

不,这不是错误。Euler项目说:

因此,前12个术语将是:

f 1 = 1
f 2 = 1
f 3 = 2
...
f 11 = 89
f 12 = 144

请注意每个" F"的小下标号右下角。这些是索引。,因此它们开始用1索引,因此"位置"one_answers"索引"在这里是等效的。特别是,我们可以看到第一个具有三位数字的斐波那契数在索引12中。

您选择的编程语言和数据类型以及该语言对索引的选择并不能超越问题声明中的内容。如果确实如此,那将是一个问题,因为编程语言,它们开始用1。

索引

在下面的评论中,您谈论"常见术语"及其"通常是指"。我敢肯定,您意识到Euler项目非常数学,在数学中,这些下标是索引。例如,请参见数学中的索引符号。顺便说一句,所有那里的示例开始以1(而不是0)为索引,因为这也是数学的常见/通常方式。