Ruby:调用函数时得到TypeError.发生了什么?

Kob*_*kie 0 ruby

我是一个红宝石新手,并有一个问题,让下面的代码工作

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).在这种情况下,任何人都能帮我解决我做错的事吗?提前致谢

kch*_*kch 6

正如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)