【第1部】C言語(K&R検証)編
0007.累乗(るいじょう)関数をテストする
ソース紹介
CPPファイルに記述
#include <iostream>
#include <cstdio>
using namespace std;
/*
base を n乗 する。ただし n >= 0
*/
int power(int base, int n) {
int p;
for (p = 1; n > 0; --n) {
p = p * base;
}
return p;
}
/*
累乗(るいじょう)関数をテストする
*/
int main()
{
for (int i = 0; i < 10; ++i) {
cout << i << '\t';
cout << power(2, i) << '\t';
cout << power(-3, i) << endl;
}
return 0;
}
出力
0 1 1
1 2 -3
2 4 9
3 8 -27
4 16 81
5 32 -243
6 64 729
7 128 -2187
8 256 6561
9 512 -19683
サンプル説明
K&Rには
べき乗を計算する関数が複数紹介されてますが、今回はその
forループを使った関数を元にしています。
C/C++言語の関数呼び出しは
値呼び出しです。
つまり呼び出し元が呼び出す関数に引数を渡すにあたって、呼び出される側は
引数のコピーを作り出して、操作(処理)をします。そのため
呼び出し側の変数は、呼び出した後もその内容が変わりません。
今回のサンプルでは、呼ばれた側
power()関数が、引数そのもの
int nを変更しています。しかし、コピーが渡されているので、呼び出し側
main()関数の
int iが影響を受けることはありません。
for (p = 1; n > 0; --n) {
p = p * base;
}
で確認できます。
このことを使って
再帰処理を行うこともできます。
しかし、明示的に
ポインタもしくは参照を渡すと、呼び出された側が、その内容を変更することが可能となります。
K&Rでの記述
元になったのは
第1章:やさしい入門に記述されています。
引数-値による呼び出しの説明のところです。