为什么可以';我是否在Ruby中递归地附加到数组的末尾?
我是ruby的新手,遇到了一个在google中找不到答案的错误,或者堆栈溢出 我试图将fibinachi序列的前10个值放入如下数组:为什么可以';我是否在Ruby中递归地附加到数组的末尾?,ruby,arrays,recursion,types,primitive-types,Ruby,Arrays,Recursion,Types,Primitive Types,我是ruby的新手,遇到了一个在google中找不到答案的错误,或者堆栈溢出 我试图将fibinachi序列的前10个值放入如下数组: #@fib=[] #Maybe try creating the array differently? @fib=Array.new foo=42 puts "foo is of type #{foo.class}" @fib.push(42) #Testing the array puts @fib #Show the test def find_fib(
#@fib=[] #Maybe try creating the array differently?
@fib=Array.new
foo=42
puts "foo is of type #{foo.class}"
@fib.push(42) #Testing the array
puts @fib #Show the test
def find_fib(anumber)
return anumber if anumber <= 1
( find_fib(anumber - 1) + find_fib(anumber - 2 ))
#@fib.push(anumber.to_i) #Maybe I need to specify it is an integer http://stackoverflow.com/questions/11466988/ruby-convert-string-to-integer-or-float
puts "anumber is of type #{anumber.class}"
puts "They array is of type #{@fib.class}"
puts "a number is #{anumber}"
@fib.push(anumber) #<= this line fails
end
puts find_fib(10)
有人能给我解释一下
foo
和anumber
之间有什么不同,阻止我附加到数组中吗?毕竟,它们都是“Fixnum”数据类型 对于您发布的错误,这是因为find\u fib
方法的终止条件返回anumber
,类型为Fixnum
。此返回值用于以前的递归:
( find_fib(anumber - 1) + find_fib(anumber - 2 ))
这里您将调用Array+Fixnum
,这将导致类型检查错误。将终止条件更改为以下可能会删除该错误
def find_fib(anumber)
return [anumber] if anumber <= 1
...
def find_fib(数量)
如果您的方法存在许多问题,请返回[anumber]:
def find_fib(anumber)
return anumber if anumber <= 1
(find_fib(anumber - 1) + find_fib(anumber - 2)) # 1
# ETC...
@fib.push(number) # 2 and 3
end
顺便说一句,Ruby的惯例是使用2-空格缩进,而不是4-空格缩进。@fib.push(number)#Johnsyweb感谢您指出这一点。打字错误只存在于SO上,而不存在于我的本地副本上。我在问题中解决了这个问题。@spuder顺便说一句,我认为原始算法的问题之一可能是每个递归调用返回一个数组,该数组表示斐波那契数的加法操作数,而不是该子序列的求和斐波那契数。这只是一种预感,我不是100%确定这是问题所在。你在两个方面都是对的,将一个数字改为[一个数字]消除了错误。算法仍然有一些问题,我现在可以研究一下。
def find_fib(anumber)
return anumber if anumber <= 1
(find_fib(anumber - 1) + find_fib(anumber - 2)) # 1
# ETC...
@fib.push(number) # 2 and 3
end
def fib(n)
(n == 1) ? [0] : (2..(n-1)).each_with_object([0,1]) { |i,a| a[i] = a[i-2] + a[i-1] }
end