フィボナッチ数列とハノタ再帰
3041 ワード
フィボナッチ数列の一般的なアルゴリズム:
フィボナッチ数列の再帰アルゴリズム
再帰アルゴリズムは簡単に見えるが,実際の計算では一般アルゴリズムよりも再帰にかかる時間が多い.
ハノタ再帰:
アルゴリズムの考え方:皿が1つしかない場合は、A塔の上の皿からC塔に移すだけです.A塔に2つの皿がある場合は、まずA塔の上の1番皿(番号を上から下へ)をB塔に移動し、A塔の上の2番皿を移動するC塔に、最後にB塔の上の小皿をC塔に移動する.
Aタワーにn個の皿がある場合は、まずAタワー上の最大皿以外の皿(合計n-1個)をBタワー上(Cタワーを介して)に移動し、その後、Aタワー上の最大n号皿をCタワー上に移動し、最後にBタワー上のn-1個の皿をAタワーを介してCタワー上に移動する.
public static void main(String[] args) {
// TODO Auto-generated method stub
int num1=0;
int num2=1;
int numn=1;
int n=10;
for (int i = 3; i <=n; i++) {
numn=num1+num2;
num1=num2;
num2=numn;
}
System.err.println(n+" :"+numn);
}
}
フィボナッチ数列の再帰アルゴリズム
public static int fbnq(int n){
if(n==1){
return 0;
}
if(n==2){
return 1;
}
return fbnq(n-1)+fbnq(n-2);
}
再帰アルゴリズムは簡単に見えるが,実際の計算では一般アルゴリズムよりも再帰にかかる時間が多い.
ハノタ再帰:
public static void move(char pos1,char pos2){
System.out.println(pos1+"-->"+pos2);
}
public static void hanio(int n,char pos1,char pos2,char pos3){
if(n == 1){
move(pos1,pos3);
}else{
hanio(n-1,pos1,pos3,pos2);
move(pos1,pos3);
hanio(n-1,pos2,pos1,pos3);
}
}
アルゴリズムの考え方:皿が1つしかない場合は、A塔の上の皿からC塔に移すだけです.A塔に2つの皿がある場合は、まずA塔の上の1番皿(番号を上から下へ)をB塔に移動し、A塔の上の2番皿を移動するC塔に、最後にB塔の上の小皿をC塔に移動する.
Aタワーにn個の皿がある場合は、まずAタワー上の最大皿以外の皿(合計n-1個)をBタワー上(Cタワーを介して)に移動し、その後、Aタワー上の最大n号皿をCタワー上に移動し、最後にBタワー上のn-1個の皿をAタワーを介してCタワー上に移動する.