gpt4 book ai didi

ruby - 为什么我不能在 Ruby 中递归地附加到数组的末尾?

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:15 25 4
gpt4 key购买 nike

我是 ruby​​ 的新手,我遇到了一个错误,我无法在谷歌中找到答案,或者堆栈溢出。

我正在尝试将 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(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)

我收到以下错误:

...`+': no implicit conversion of Fixnum into Array (TypeError)
.......
foo is of type Fixnum
42
anumber is of type Fixnum
They array is of type Array
a number is 2
[Finished in 0.3s with exit code 1]

有人可以向我解释 fooanumber 之间有什么不同,这会阻止我追加到数组吗?毕竟,它们都是“Fixnum”数据类型。

最佳答案

对于您发布的错误,那是因为 find_fib 方法的终止条件返回 anumber,它是 Fixnum 类型。此返回值用于您之前的递归:

( find_fib(anumber - 1) + find_fib(anumber - 2 ))

这里你要调用Array + Fixnum,这会导致类型检查错误。将终止条件更改为以下可能会消除该错误。

def find_fib(anumber)
return [anumber] if anumber <= 1
...

顺便说一句,您的find_fib 不会按预期工作,您可能需要进一步调整算法实现。

关于ruby - 为什么我不能在 Ruby 中递归地附加到数组的末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22752407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com