當前位置:商標查詢大全網 - 培訓招生 - 帕斯卡·河內塔執行過程

帕斯卡·河內塔執行過程

課本上有,我就直接幫妳找了。

這是壹個經典的遞歸。

分析:這是壹個非常好的遞歸編程的例子。與之前的遞歸程序不同,他先有壹個非遞歸程序,然後重寫為遞歸形式。如果這個問題不使用遞歸過程,可能無法啟動。讓我們以三塊金子為例:

要從條形a移動到條形b,您必須在條形c的幫助下進行轉換。移動方案為:

A-B

步驟2 A-C

第三步B-C

A-B

第五步C-A

步驟6 C-B

A-B

* * *移動七次完成A極上的三枚金塊,按照題目要求的規則移動到B極。

題目要求以同樣的方式將N枚金幣從A桿移動到B桿:

1.首先(遞歸地)將A杠上面的n-1塊移動到C杠上(使用B杠);

2.然後把A杠上唯壹的壹塊移到B杠上;

3.然後將C條上的n-1塊(遞歸)移動到B條上(使用A條)。

這是壹個遞歸調用過程。該過程如下:

程序P6-14;

定義變量

n:整數;

過程移動(n:整數;a,b,c:char);{定義遞歸過程}

開始

如果n=1,則

writeln('move ',n,' from ',a,' to ',b)

Else {多個切片,遞歸}

開始

move(n-1,a,c,b);{遞歸地將n-1塊從A移動到C,並使用桿B進行轉換}

writeln('move ',n,' from ',a,' to ',b);{最後壹部電影從A移到b}

移動(n-1,c,a,b);{遞歸地將桿C上的n-1移動到桿B上,並使用桿A進行過渡}

結束;

結束;

開始{主程序}

write('輸入n:');

讀作(n);

move(n,' A ',' B ',' C ');

結束。

運行:

輸入n: 3(回車)

將1從A移動到B

將2從A移動到C

將1從B移動到C

將3從A移動到B

將1從C移動到A

將2從C移動到B

將1從A移動到B

程序運行時,輸入n的值,除了3,可以選擇4,5,6,但千萬不要輸入64。因為通過推演,如果按照規則移動64枚金幣,妳要移動2 64-1 = 1.8 * 10 19次。如果每秒移動壹次,就需要壹萬億年。根據科學計算,地球的“壽命”大約是幾十億到幾百億年。妳可以看到地球的毀滅,妳也無法完成遊戲。即使計算機每秒鐘“移動”壹億次,也需要5800年,所以不可能完成遊戲。

這樣夠詳細了吧?摘自《Pascal語言中學版第2版,青少年信息學奧林匹克競賽訓練教材》北京理工大學出版社,這個還不錯。