Ruby 如何从数组的角度表达数组中的关系';谁是红宝石会员?
在ruby中,如何声明数组中相对于其中一个成员的位置?我正在尝试为Fibonnaci序列编写测试,其术语限制为400万,我的规范如下: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
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
不是问题。好的观点。请允许我在问题中提供更多的背景。我忘了提到四百万限制条款。