tail_recursion.rb
Heads up: This description was created by AI and might not be 100% accurate.
このRubyスクリプトは、1からnまでの整数を合計する関数sumを定義しています。
プログラムの特徴:
- Rubyの標準ライブラリに依存せず、再帰関数を用いずに、
whileループを使って計算を行います。 frozen_string_literal: trueは、文字列定数を凍結し、パフォーマンスを向上させるための指示です。puts sum(10)は、sum関数をn=10で呼び出し、その結果を標準出力に出力します。
アルゴリズム:
- 初期化:
mという変数に0を代入します。mは合計値を保持するために使用します。 - whileループ:
nの値が1でない限り、以下の処理を繰り返します。nの値をmに加算します。nの値を1減らします。
- 最終的な合計:
nが1になった時点で、ループを終了し、mに1を加算した結果を返します。これは、最初の1からnまでの合計です。
例(sum(10)の場合):
n = 10,m = 0while 10 != 1:m = 0 + 10 = 10n = 10 - 1 = 9
while 9 != 1:m = 10 + 9 = 19n = 9 - 1 = 8
while 8 != 1:m = 19 + 8 = 27n = 8 - 1 = 7
while 7 != 1:m = 27 + 7 = 34n = 7 - 1 = 6
while 6 != 1:m = 34 + 6 = 40n = 6 - 1 = 5
while 5 != 1:m = 40 + 5 = 45n = 5 - 1 = 4
while 4 != 1:m = 45 + 4 = 49n = 4 - 1 = 3
while 3 != 1:m = 49 + 3 = 52n = 3 - 1 = 2
while 2 != 1:m = 52 + 2 = 54n = 2 - 1 = 1
while 1 != 1:(false) ループを終了m + 1 = 54 + 1 = 5555を返します。
最終的に、55という値が標準出力に出力されます。
Ruby code snippet
# frozen_string_literal: true
#=> nil
def sum(n)
m = 0
while n != 1
m += n
n -= 1
end
m + 1
end
#=> :sum
puts sum(10)
55
#=> nil
Executed with Ruby 3.4.9.