漢諾塔遞推題,比漢諾塔多了一個限制條件,盤子只允許在相鄰的柱子之間移動。
分析:
第1步:初始狀態;
第2步:把上面的n-1個盤移到第3號桿上;
?
第3步:把第n個盤從1移到2;
第4步:把前n-1個從3移到1,給第個盤讓路;
第5步:把第n個盤從2移到3;
第6步:把前n-1個從移到3,完成移動;
我們設f(n)為把n個盤從1移到3所需要的步數,當然也等于從3移到1的步數。
看什么的圖就知道,要想把第n個盤從1移到3,需要想把前n-1個從1移動3,再從3->1最后再1->3。
而第n個盤要從1->2->3經歷2步。
∴f(n) = 3 × f(n-1) + 2;
??f(1) = 2;
#include<stdio.h> int main() {__int64 f[36],n,i;f[1]=2;for(i=2;i<=35;i++)f[i]=3*f[i-1]+2;while(scanf("%I64d",&n)!=EOF)printf("%I64d\n",f[n]);return 0; }
?
?