1、递归预防栈溢出、不能陷入死递归无法自拔、递归层次不能太深
2、递归要有跳出条件、每次递归必须逼近跳出条件
问:给一个数1234,分别按顺序输出1 2 3 4#includeusing namespace std; int strl(int n) { int cout; if(n==0) return 1; while(n%10) { cout++; n/=10; } return cout; } int mi(int x) { int re=1; for(int i=1;i 初版代码:
写了两个函数strl(取位数)mi(取10的幂)在递归函数里调用,脑子抽了,好麻烦啊!!比存数组还麻烦
其实在打印前递归就很好的解决了这个问题
#includeusing namespace std; void digui(int n) { if(n==0)return ; digui(n/10); printf("%d ",n%10); } int main() { digui(1234); return 0; } 这种情况下是1 2 3 4
void digui(int n) { if(n==0)return ; printf("%d ",n%10); digui(n/10); }这样就是4 3 2 1
用递归写strlen()
int my_strlen(char *str) { if(*str!=' ') return 1+my_strlen(str+1); return 0; }斐波那契:int Fib(int n) { if(n<=2) return 1; return Fib(n-1)+Fib(n-2); }这样效率低
可以用迭代
int Fib(int n) { int a=1,b=1,c=1; while(n>2) { c=a+b; a=b; b=c; n--; } return c; }阶乘:int Fac(int n) { if(n<=1) return 1; return n*Fac(n-1); }汉诺塔:#include青蛙跳台阶:using namespace std; void move(char beg,char end) { cout< "< >n; hanoi(n,'A','B','C'); return 0; }



