2
数字を単語に変換する必要があるチャレンジをどのように完了したかについて、Rubyコードを共有しました。この解決策ははるかに読みやすいものでしたが、私はそれの再帰的な側面を完全には理解していません。具体的には、下の行にある...Rubyコードの説明:再帰を使用した文字列への数値
elsif int.to_s.length == 1 && int/num > 0
return str + "#{name}"
return文は、ループの外にコードを壊した場合、それが真実であるならば、なぜこのコードは、ループを実行し、壊さないでしょうか?たとえば、int = 4およびnum = 1の場合、これは真であり、returnステートメントをトリガーしますが、コードはnum = 4になるまで続きます。
コードのこの側面、およびこの解決策を理解するための一般的な助言が役に立つでしょう。まだ再帰を理解しようとしています。おかげ
def in_words(int)
numbers_to_name = {
1000000 => "million",
1000 => "thousand",
100 => "hundred",
90 => "ninety",
80 => "eighty",
70 => "seventy",
60 => "sixty",
50 => "fifty",
40 => "forty",
30 => "thirty",
20 => "twenty",
19=>"nineteen",
18=>"eighteen",
17=>"seventeen",
16=>"sixteen",
15=>"fifteen",
14=>"fourteen",
13=>"thirteen",
12=>"twelve",
11 => "eleven",
10 => "ten",
9 => "nine",
8 => "eight",
7 => "seven",
6 => "six",
5 => "five",
4 => "four",
3 => "three",
2 => "two",
1 => "one"
}
str = ""
numbers_to_name.each do |num, name|
if int == 0
return str
elsif int.to_s.length == 1 && int/num > 0
return str + "#{name}"
elsif int < 100 && int/num > 0
return str + "#{name}" if int%num == 0
return str + "#{name} " + in_words(int%num)
elsif int/num > 0
return str + in_words(int/num) + " #{name} " + in_words(int%num)
end
end
end
puts in_words(4) == "four"
puts in_words(27) == "twenty seven"
puts in_words(102) == "one hundred two"
puts in_words(38_079) == "thirty eight thousand seventy nine"
puts in_words(82102713) == "eighty two million one hundred two thousand seven hundred thirteen"
ああ - ありがとう!私は今、各ループが何百万ドルものトップから始まっていることを認識しています。私の面倒を見落とす私にそれを見せてくれてありがとう! –