前回の授業では,再帰関数について学習した.関数の定義において,自分自身を呼び出す
関数を再帰関数という.具体的には,リスト
1のような階乗を計算する関数である.
階乗は,
|
(1) |
であるが,漸化式を使って
のように定義することもできる.この漸化式そのものをプログラムにすると,リスト
1のように再帰関数を使うことになる.
1 #include <stdio.h>
2
3 int kaijyo(int n); // プロトタイプ宣言
4
5 //========== メイン関数 ================================
6 int main(void)
7 {
8 int nx, result;
9
10 scanf("%d", &nx); // 整数入力
11 result=kaijyo(nx); // 関数呼出し
12 printf("%d!=%d\n", nx, result); // 計算結果表示
13
14 return 0;
15 }
16
17 //========== 階乗を計算する関数(再帰呼出し)===============
18 int kaijyo(int n)
19 {
20
21 if(n==0){
22 return 1;
23 }else{
24 return n*kaijyo(n-1);
25 }
26
27 }
12
12!=479001600
次の二つのことをおさえれば,再帰関数を書くことができる.
- 再帰関数の終了条件を書く.
- 漸化式のように問題を分割し,その通りにプログラムを書く.ただし,問題の分
割はつぎのようにする.
- 分割したものを合わせることにより,元の問題となる.
- 分割したひとつの問題は,元の問題よりも小さい.
- 分割したひとつの問題は,元の問題と同じ方法で解ける.
このように分割することにより,ある自明な解--再帰関数の終了条件--まで分
割できる.そうすると問題が解けるのである.
本日は,ポインターについて学習する.ポインターについては,1年生のときにそのメカ
ニズムについて学習した.ここでは,後のデータ構造の学習のために,ポインターの使い
方の基礎を学ぶ.本日の学習のゴールは,以下のとおりである.
- ポインターとオブジェクトの関係が分かる.
- 構造体へのポインターの使い方が分かる.
- 関数へのポインターの使い方が分かる.
- ポインターの配列を使って,文字列定数の並びを処理できる.
教科書 [2]のpp.114-133が本日の範囲である.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成19年5月29日