0

なのでRubyのメソッドは知っているのですMath.sqrt(number)が、言語学習の一環として簡単な関数を作ってみようかなと思いました。基本的なレベルから平方根が間違っていることを見つけようとしている可能性がありますが、これが私がやったことです:

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

これは小さい数値では問題なく機能しますが、大きい数値を入力する場合は、答えを取得したい場合は @start の値を変更する必要があります。そうしないと、「スタックが深すぎます」と表示されます。コードで何か間違ったことをしているのですか、それとも 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
4

1 に答える 1

3

Rubyは期待どおりに機能しているようです。リソースを大量に消費する方法(再帰)で数値の平方根を見つけるように求めています。

実際、スタックオーバーフローエラーが発生しました。:)

于 2012-08-09T16:28:58.983 に答える