我的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)
部分,一切正常。我无法弄清楚我错过了什么。
答案 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