自然数列の和を求めるプログラムでループ処理と再帰処理の比較をする。
ループを使った処理をJavaScriptで書く。
// 自然数列の和 1 + 2 + 3 + 4 + 5 + ... + n
// ループを使った処理
var sum = function (k) {
var n;
var sum = 0;
for (n = 1; n <= k; n++) {
sum += n;
}
return sum;
}
sum(0); // 0
sum(1); // 1
sum(10); // 55
ループの代わりに再帰を使って求める。
// 自然数列の和
var sum = function (n) {
if (n === 0) {
return 0;
}
if (n === 1) {
return 1;
}
return sum(n-1) + n;
}
sum(0); // 0
sum(1); // 1
sum(10); // 55
即時実行とメモ化を利用したコード。
// 自然数列の和
var sum = (function () {
var sequence = []; // メモ化のために結果の数列を配列に保存
return function summation (n) {
if (n == 0) {
return sequence[0] = 0;
} else if (n == 1) {
return sequence[1] = 1;
} else {
if (sequence[n-1]) {
sequence[n] = sequence[n-1] + n;
return sequence[n];
} else {
sequence[n] = summation(n-1) + n;
return sequence[n];
}
}
}
}()) // 即時実行
sum(0); // 0
sum(1); // 1
sum(10); // 55
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。