再帰的解析の複雑さの重要な点は:カットオフ状態、列挙された再帰式を見つけ、そして最終的に単純化により簡略化の数学的単純化を策定します。
/ * キー再帰計算の複雑性- >境界を見つける 時間を基本的な操作をCに設定されている コメント内のすべてについて、テキストの話-私は言葉で書いて申し訳ありませんが面倒です。 時間T(n)が消費する機能を実行する * / //は再帰階乗通常演算 INT FUNC(INT N-){ IF(!N-)戻り 0 ; // 基本的な動作は、 戻り * FUNC(N-N- 1 ); } // 時間計算 // T(N)== C + T(N - 1)== C +(C + T(N-2-)) // ... == CN + T(0)== C( + N-1) // 丸め定数==> O(N)の単純なルールによって // 空間的複雑 // ために(N-1)の場合FUNC(n-1)が決定されていないn個の*のFUNC、それは空間が必要ですこれは、記録機能を保存することである(N-1)まで決定される // 毎に必要な収納スペースとして設けられ // ==> S(N)== *再帰の数== // 丸め定数==> Oの単純な規則によって(N) INT FUNC(INT N-){ IF(N!)リターン 1。 ; / / 基本的な動作は 戻り FUNC(N- 1)+ FUNC(N- 1 ); } // T(N)== 2T(N - 1)== 2(2T(N - 2))... // = * T ^ N-2 =(0)== * 2 ^ N-C // 定数を丸めるの単純なルールから==> O(N-2 ^) のint SUM、 ボイド FUNC(INT N-){ IF(!{N-) SUM + = 1。 ; // 基本的な操作 返す ; // 基本操作 } 他{ のために(int型私は= 1。 ;; I <N- ++ I){ FUNC(N- - 1。;) } } リターン ; // 基本操作 } // 時間の複雑さO(N!) // T(N-)== nTの(N - 1)== N- T(N - 2)(1-N-。)...のn - !== * C // シンプルな正則化定数から破棄==> O(N!) のint SUM、 無効 FUNC(INT のN-){ IF(N - == 1 ){ SUM + = 1 ; }他{ ため(INT I = 1 ; I <N - 、I * = 2 ){ FUNC(N - 1 ); } } リターン; } // うK N操作の数は、再帰2 ^ K ==であること、 LOGN = K // 次の層機能LOGN時間に再帰呼び出し、次の再帰 // T(N)==ログ(N)T(N - 1)==ログ(N-)ログ(N- -1)T(N - 2)... // ?==> O()は、分析の主なアイデアで、どのように簡素化がああではないでしょう