遞歸之漢諾塔
阿新 • • 發佈:2018-02-06
pos class 輸入 能力 else print adding -c 必須
遞歸的定義:
一個函數自己直接或間接調用自己(一個函數調用另外
一個函數和他調用自己是一模一樣的,都是那三步,
只不過在人看來有點詭異。)
遞歸滿足的三個條件:
1、遞歸必須得有一個明確的終止條件
2、該函數處理的數據規模必須在遞減
3、這個轉化必須是可解的。
循環和遞歸:
理論上循環能解決的,肯定可以轉化為遞歸,但是這個
過程是復雜的數學轉化過程,遞歸能解決不一定能轉化
為循環,我們初學者只要把經典的遞歸算法看懂就行,
至於有沒有能力運用看個人。
遞歸:
易於理解
速度慢
存儲空間大
循環
不易於理解
速度快
存儲空間小
漢諾塔代碼:
/*漢諾塔 如果n為1 把A上面的直接移動到C 否則 把A上面(n-1)通過C移動到B; 把A第n個移動到C上; 再把B上面(n-1)的通過A移動到C上;*/ #include<stdio.h> int i = 0; void hannuota(int n,char A,char B,char C) { if(1 == n) printf("%d...把%c最上面的移動到%c\n\n",++i,A,C); else { hannuota(n-1,A,C,B); printf("%d...把%c最上面的移動到%c\n\n",++i,A,C); hannuota(n-1,B,A,C); } } int main() { intn; printf("請輸入盤子的數量:"); scanf("%d",&n); char ch1 = ‘A‘,ch2 = ‘B‘,ch3 = ‘C‘; hannuota(n,ch1,ch2,ch3); printf("OVER............................\n"); }
把大的數據規模一層一層化小.重要的是思想,代碼很簡單.
遞歸之漢諾塔