所以我知道在Ruby中Math.sqrt(number)
方法,但作为学习语言的一部分,我认为这是一个好主意,使一些简单的功能。我可以去有关从根本上找到平方根错,但这里是我所做的:堆栈太深红宝石错误,学习sqrt程序
def negative?(number)
number < 0
end
@start = 2
def sqrt(number)
if negative? number
puts "Can't do negative"
else
if @start**2 < number
@start += 0.01
sqrt(number)
else
puts "Square root of #{number} is #{@start}!"
end
end
end
def start_sqrt
print "Input text: "
number = Integer(gets.strip)
sqrt(number)
end
begin
start_sqrt
rescue ArgumentError
puts "Need a positive number!"
end
这对于较小的数字工作正常,但是当我进入更大的数字,我需要改变的值@开始,如果我想得到答案,否则它说“堆太深”。我在代码中做了什么错误,或者Ruby做的很好,我只是要求它以资源密集型的方式找到数字的平方根?我想这也许是更不是编程的问题,更数学问题的,因为我知道我可能只是这样做:
def sqrt(number)
if negative? number
puts "Can't do negative"
else
root = number**0.5
puts "Square root of #{number} is #{root}!"
end
end
当数字很大时,您需要太多的递归,堆栈变得太深。 – Mischa 2012-08-09 16:26:36