递归的定义:
一个函数自己直接或间接调用自己(一个函数调用另外
一个函数和他调用自己是一模一样的,都是那三步,
只不过在人看来有点诡异。)
递归满足的三个条件:
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() { int n; printf("请输入盘子的数量:"); scanf("%d",&n); char ch1 = ‘A‘,ch2 = ‘B‘,ch3 = ‘C‘; hannuota(n,ch1,ch2,ch3); printf("OVER............................\n"); }
把大的数据规模一层一层化小.重要的是思想,代码很简单.