河內之塔算法

有三根柱子,n 個圓盤,在第一個柱子那按從大到小排列,將其移到c,最少需要多少步驟?

 

1個盤,A->C,1步,

2個盤,A->B,A->C,B->C,3步

3個盤,吧前2個移到B,需要3步,再把第三個移到C,1步,再把B上2個移到C,總共s2+1+s2=7步

4個盤前面3個移到B,S3步,第四個移 到C,1步,吧B上3個移到C,S3步,總共S3+1+S3=15步

 

後面以此類推……

有n個盤子,Sn=2*S(n-1)+1

                    S(n-1)=2*S(n-2)+1


……………………………………


S2=2*S1+1

S1=1

 

用高中數列知識即可算出:Sn=2^(n-1) -1

 

#include

int s( int n){
if(n==1)
return 1;
else
return 2*s(n-1)+1;
}

void main()
{int n;
scanf("%d",&n);
printf("%d",s(n));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章