図1に示すように、再帰的な方法の配列における最大の要素を見つけます。
する#include <stdio.hの> INT MAX(int型 A、int型B){ 場合(> b)に 戻ります。 他の リターンB; } INT FMAX(INT A []、int型のI){ 場合(I == 1 ) を返す [ 0 ]。 他 リターン MAX(FMAX(I- 1)、[I- 1 ])。 } INT のmain(){ int型 [] = { 1、32、34、56、12 }。 INT MAXNUM = FMAX(5 )。 printf(" %dの" 、MAXNUM)。 }
テスト結果:
再帰の観点から(1):
問題の各再帰的時間スケールは、再帰再帰輸出まで1減少しました。
パーティション分析方法の観点から、(2):
FMAX(I int型、] [INT)問題を破壊することである:FMAX(I-1)および[I-1]、問題の時間スケールは、MAX関数に減少するまで、直接解くと呼ぶことができます。
図2に示すように、2つの複素数X = A + BiおよびY = C +ジが設けられています。XY複雑な製品、すなわち、4回の乗算を完了するために使用することができる:XY =(AC-BD)+(AD + BC)私は、3つだけ乗算を解決するために設計されたアルゴリズム
= iのインデックスi、ように[i]が存在する場合、図3に示すように、再帰的に順次配列に格納された、互いに異なる整数Nが設けられています。このインデックスを見つけるために、O(log2n)時間でアルゴリズムを設計します。
ボイド位置は(int型 []、INT L、int型r)を{ INT ミッド。 一方、(L < R){ mid=(l+r)/2; if(a[mid]==mid) return mid; if(a[mid]<mid) l=mid+1; if(a[mid]>mid) r=mid-1; } rerurn -1;//未找到元素 }