2012-08-09 73 views
0

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

當數字很大時,您需要太多的遞歸,堆棧變得太深。 – Mischa 2012-08-09 16:26:36

回答

3

它看起來像紅寶石按預期工作。您要求它以資源密集型方式查找數字的平方根(遞歸)。

實際上,您已經創建了堆棧溢出錯誤。 :)

+0

甚至沒有進行堆棧溢出連接......這很有趣 – 2012-08-09 18:32:16