Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何从数组的角度表达数组中的关系';谁是红宝石会员?_Ruby_Arrays_Testing_Fibonacci - Fatal编程技术网

Ruby 如何从数组的角度表达数组中的关系';谁是红宝石会员?

Ruby 如何从数组的角度表达数组中的关系';谁是红宝石会员?,ruby,arrays,testing,fibonacci,Ruby,Arrays,Testing,Fibonacci,在ruby中,如何声明数组中相对于其中一个成员的位置?我正在尝试为Fibonnaci序列编写测试,其术语限制为400万,我的规范如下: it 'creates an array of numbers with each member evaluating as the sum of the two previous members' do expect(fibonacci.each {|member| member == two_positions_back_from_member + on

在ruby中,如何声明数组中相对于其中一个成员的位置?我正在尝试为Fibonnaci序列编写测试,其术语限制为400万,我的规范如下:

it 'creates an array of numbers with each member evaluating as the sum of the two previous members' do
  expect(fibonacci.each {|member| member == two_positions_back_from_member + one_position_back_from_member}).to eq(true)
end

我知道你可以用array[4]来确定数组的位置。有人知道有没有一种方法可以做到这一点吗

当然,您可以在数组中找到成员,这将为您提供数组中的索引,您可以从中减去以获得相对位置。在您的示例中:

i = fibonacci.index(member); fibonacci[i-2] + fibonacci[i-1]
也就是说,你不能像这样测试斐波那契序列,因为它是一个序列。因为它是无限的,所以需要永远。当然,除非你的
fibonacci
只是一个摘录

而且,
每个
都将返回
斐波那契
,因此
期望
这个
。成为(真)
可能不是您想要的。尝试使用
map
而不是
each
,然后使用
expect
。要均衡(斐波那契)
,您可以使用:


我假设斐波那契序列的前两个元素(“种子值”)是0和1(与1和1相反,有时会看到);也就是说,
0,1,2,3,5,8,13,21,

我认为有效地实现这一点的最佳方法是创建第一个
N=4_000_000
斐波那契数的数组
fib
,以及相应的哈希
bif
,以便:

bif[fib[i]] = i
以下是对第一个
N
斐波那契数执行此操作的一种方法:

N = 10
fib = [0,1,1]
fib_minus_two = fib_minus_one = 1
bif = {}

(3..N-2).each do |n|
  f = fib_minus_two + fib_minus_one
  fib << f
  bif[f] = n
  fib_minus_two = fib_minus_one
  fib_minus_one = f
end

bif.each { |f,i| puts "# bif[#{f}]=>#{i}, fib[#{i}]=>#{f}" } 
  # bif[2]=>3, fib[3]=>2
  # bif[3]=>4, fib[4]=>3
  # bif[5]=>5, fib[5]=>5
  # bif[8]=>6, fib[6]=>8
  # bif[13]=>7, fib[7]=>13
  # bif[21]=>8, fib[8]=>21
对于斐波那契数
1
,您可以测试它

fib[0] = 0
fib[1] = 1
fib[2] = 1
i = bif[n]
fib[i] = fib[i-1] + fib[i-2]
对于任何斐波那契数
n
n>1
,您都可以测试它

fib[0] = 0
fib[1] = 1
fib[2] = 1
i = bif[n]
fib[i] = fib[i-1] + fib[i-2]

当然,
N=4_000_000
不是问题。

好的观点。请允许我在问题中提供更多的背景。我忘了提到四百万限制条款。