31.9 繰り返し

計算機の大きな特徴は,同じまたは似たような処理の繰り返しが高速にできることです.1 つの例として,1 から 100 までの和,つまり “1+2+…+99+100” を求めてみましょう.もちろん公式を使って “(1 + 100) * 100 / 2” とするのではなく,純粋に足し算を繰り返し行うのです.

つまり,“1+2+…+99+100” という計算は「“1” に “2” から “100” を順番に足している」と考えられます.以下では面倒事を減らすために「“0” に “1” から “100” を順番に足している」としますが,このように値を増やしながら処理を行う方法が多くのプログラム言語で用意されています.

繰り返しの方法

Java で「変数 “i” が “1” から “n” まで動きながら各々順番に処理を行う」という繰り返し処理は,

for(int i = 1; i <= n; i++) {
  i番目の処理
}

のように書くことができます.なお,この “for” という表現は一般的には

for(最初の処理; 継続条件; 次に進む前の処理) {
  処理
}

となっています.

つまり,プログラムが “for” の所にさしかかると,最初に “int i = 1” が行われて変数 “i” が “1” として定義されます.次に継続条件 “i <= n” の真偽値を計算して “true” だったら “1 番目の処理” が行われます.それが終わると,“i++” が処理されます.これは “i = i + 1” の略記法で,現在の “i” の値に “1” を足した値を新しく “i” に代入する,つまり “i” の値を 1 増やす処理を行います.これによって “i” の値は “2” になるので,継続条件 “i <= n” を判定して “true” だったら,“2 番目の処理” が行われます.このようにして繰り返しを実行することができるのです.

そして “n 番目の処理” が終わると,次の “i++” で “i” の値は “n+1” になるので,継続条件 “i <= n” が “false” になり繰り返しが終わります.

繰り返しの利用

では,実際に繰り返しを試してみましょう.

「1 から 100 までの和」では繰り返しの途中までの和を記録する変数 “s” を設けて,

int s = 0;
for(int i = 1; i <= 100; i++) {
  s = s + i;
}

とすれば,繰り返しが終わった時に「“0” に “1” から “100” を順番に足した数」が計算されているはずです.

せっかくなのでここでは「1 から n までの和」を計算するメソッド “sum” を作ってみたいと思います.上のソースコードで “100” になっているところを “n” にして,処理が終わったら “s” を返せばよいのです.

// Program.java: 整数の和の計算 class Program { public static int sum(int n) { int s = 0; for(int i = 1; i <= n; i++) { s = s + i; } return s; } public static void main(String[] args) { System.out.println(sum(10)); System.out.println(sum(100)); System.out.println((1 + 100) * 100 / 2); } }
55 5050 5050

正しく計算できていることがわかりますね.