新刊ピックアップ

河西メソッドとは何か?

この記事を読むのに必要な時間:およそ 0.5 分

あまたあるC言語入門書は,そのほとんどが言語仕様にそって,文法を解説していくものであった。多くの人たちがいつまでたってもプログラムが書けない原因がここにあったといってよい。

学習の方法としては,これではダメである。コンピュータ言語の学習書は,歴史が浅いためいまだ数学などのジャンルと比べて洗練されているとはとてもいえない程度なのだ。

河西メソッドは,実際のプログラムの目的にそって学習項目を組み立てることに着目して,実際に授業の現場で大きな成果がでている画期的な方法となりつつある。

例えば,for文と配列は密接な関係にある。そこで,for文と配列は「行きつ戻りつ」で相互作用で学習していくように工夫する必要がある。

本書はこうした学習理論に基づいて,相互関係の中でプログラムを組み立てる能力,考える力を引き出す訓練を行うようになっている。

実際に内容をちょっと示そう。


次はフィボナッチ数を求める関数fib()である。

int fib(int n)
{
	if(n==1 || n==2)
		return 1;
	else
		return fib(n-1)+fib(n-2);
}

このプログラムにあるとおり,フィボナッチ数とは,

Fn=Fn-1+Fn-2
F1=F2=1

と定義される数である。フィボナッチは「1つがいの子ウサギがいる。この子ウサギは1ヵ月後に親ウサギとなり,その1ヵ月後に1つがいの子ウサギを産む。どのつがいも死なずに増殖を繰り返していくと12ヵ月後は233つがいになる」として,増殖問題の解法を示した。これは,さまざまな増殖問題に使える。

フィボナッチ数が,⁠ダビンチコード」ですっかり有名になったのは記憶に新しい。

問題

このfibを使って1項~20項までのフィボナッチ数列を求めるプログラムを作りなさい。

答え

#include <stdio.h>
int fib(int n)
{
	if(n==1 || n==2)
		return 1;
	else
		return fib(n-1)+fib(n-2);
}

int main(void)
{
	int n;
	for(n=1;n<20;n++)
		printf("%d,",fib(n));
}