所以我知道在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