我是一个红宝石新手,并有一个问题,让下面的代码工作
def factorial(n)
if n == 0
1
else
n * factorial(n-1)
end
end
puts factorial(numbers)
Run Code Online (Sandbox Code Playgroud)
我一直得到错误消息无法将"修复"转换为"factorial"中的Array(TypeError).在这种情况下,任何人都能帮我解决我做错的事吗?提前致谢
正如mquander所说,numbers显然是一个阵列.
所以你需要的是:
puts(numbers.map { |n| factorial(n) })
Run Code Online (Sandbox Code Playgroud)
而且,顺便说一句,您的错误与递归无关.
确认mquander的理论:
> numbers = [1,2,3]
> puts factorial(numbers)
TypeError: can't convert Fixnum into Array
Run Code Online (Sandbox Code Playgroud)
只是出于好奇,这里是你如何在没有递归的情况下在ruby中实现阶乘,这样你就不会因为大数而出现堆栈溢出.
def factorial(n)
(1..n).inject(1) { |ac, x| ac * x }
end
Run Code Online (Sandbox Code Playgroud)