ホーム » スタッフ » 斉藤徹 » 再帰処理の速度分析

2011年4月
« 3月   5月 »
 12
3456789
10111213141516
17181920212223
24252627282930

最近の投稿(電子情報)

アーカイブ

カテゴリー

再帰処理の速度分析

例年通りの進み方なんだけど、再帰処理の速度分析をするための説明を行う。 最初に、fact(N) , 配列の2分割積算 , fib(N) のプログラムを示し、 処理の流れのトレースを解説。 この後に、ハノイの塔の再帰方程式と数学的帰納法による証明を説明する。

ハノイの塔のディスクの移動回数を、 で表す。 ハノイの塔のルールより、N枚のディスクの移動には、(1)最下層の1枚の上にある、(N-1)枚を 隣に移動、(2)最下層の1枚を移動、(3)一旦隣に動かしておいた(N-1)枚を、目的の塔に 移動というステップを経由する。このため、 ただし また、最終的には、 が成り立つ。

ハノイの塔は、少ない枚数での移動を解いてみると、 が予想される。 この式が常に成り立つことを証明するため、枚についてこの予想が成り立つものと仮定する。 この時、枚については、

が成り立つので、

となり、 でも仮定が成り立つことが示される。よって、数学的帰納法により仮定は全ての 自然数について成り立つ。

この証明のような、式の中に自分自身が含まれるような方程式を、再帰方程式と呼ぶ。 再帰処理の速度予測では、これと同じように再帰方程式をたてる事ができる。

プログラムと再帰方程式

int fact( int N ) {
if ( N == 1 )
return 1 ;
else
return N * fact( N - 1 ) ;
}

このプログラムの処理時間は、N=1においては、if,==,return の一定の処理が行われるので、

Nが2以上では、if,==,*,-1,returnの処理と、fact()の再帰が行われる。よって、

この再帰方程式を、代入を繰り返しながらとけば、

が導き出せる。よって、階乗の再帰プログラムの処理時間のオーダは、 となる。