生活随笔
收集整理的這篇文章主要介紹了
递归实现汉诺塔程序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
[將漢諾塔]這不是線性遞歸,這是個非線性遞歸!
n=1? ? ? ?1
n=2? ? ? ?3
n=3? ? ? ?7
.................
n=64
2的64次方減1 [這是個天文數(shù)字,就算世界上最快的計算機也解決不了
漢諾塔的復(fù)雜度是2的n次方減一
問題很復(fù)雜,恒真正解決問題的編碼就只有三句
規(guī)約法回溯法遞歸法這是算法領(lǐng)域很重要的幾種思路。
計算機把你360度掃描一下,但如果你有一次沖它笑了一次,計算機有傻眼了,又不認識了
但人則不一樣,如果你當初深深的望了某人一眼,肯能若千年后也忘不掉!?
#include <stdio.h>//將n個盤子從x借助y移動到z
void move(int n,char x, char y, char z){
/** 如果是1個盤子* 直接將A柱子.上的盤子從A移到C* 否則* 先將A柱子.上的n-1個盤子借助C移到B* 直接將A柱子上的盤子從A移到C* 最后將B柱子上的n-1個盤子借助A移到C .*/if (1 == n) {printf("%c-哈哈->%c\n",x,z);}else{move(n - 1, x,z, y); //將n-1個盤子從x借助z移到y(tǒng)上printf("%c-->%c\n", x,z); //將第n個盤子從x移到z上move(n - 1, y, x,z); //將n - 1個盤子從y借助x移到z上}
}int main(void) {int n;printf("請輸入漢諾塔的層數(shù): ");scanf_s("%d", &n);printf("移動的步驟如下: \n");move(n, 'x', 'y', 'z'); while (true){}return 0;
}
總結(jié)
以上是生活随笔為你收集整理的递归实现汉诺塔程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。