每个循环,堆栈级别太深(SystemStackError)

时间:2014-10-07 14:25:46

标签: ruby

我的sin(x)maclaurin系列草案代码:

def factorial(z)
  if z == 0
    1
  else
    z * factorial(z-1)
  end
end

puts "Enter x"
x = gets.chomp
puts "Enter n"
n = gets.chomp


(0..Integer(n)).each do |n|
k = ((-1)**(n-1))*(Integer(x)**(2*n-1))/factorial(2*n-1)
puts k
end

在我添加each循环之前,此代码运行良好。现在我收到stack level too deep (SystemStackError)错误。

没有each循环或/factorial(2*n-1)部分,一切正常。我无法弄清楚我错过了什么。

2 个答案:

答案 0 :(得分:3)

下面:

factorial(2*n-1)

对于n == 0(第一次迭代),此计算结果为factorial(-1)。您可能希望将因子方法更改为:

def factorial(z)
  if z <= 0
    1
  else
    z * factorial(z-1)
  end
end

答案 1 :(得分:0)

所有gets值都是字符串。

您需要将它们转换为整数,例如

puts "Enter x"
x = gets.chomp.to_i
puts "Enter n"
n = gets.chomp.to_i

在下一个代码中,您不应该使用Integer(n),只需使用n

另外要注意的是,您应该尝试使用factorial而不使用递归函数。它还可以提高大z

的堆栈级异常