小议递归算法
时间:2014-02-21 14:25:41
收藏:0
阅读:349
一,含义:
在函数或子过程的内部,直接或者间接地调用自己的算法。
二,特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
三,设计递归算法
1.确定递归公式
2.确定边界条件--出口
四,代码实现:
//实例: 翻转字符串 #include <stdio.h> void revers(char *cs); int main(void) { revers("123456789"); getchar(); return 0; } void revers(char *cs) { if (*cs) { revers(cs + 1); putchar(*cs); } }
//实例: 阶乘 #include <stdio.h> int factorial(int num); int main(void) { int i; for (i = 1; i <= 9; i++) printf("%d: %d/n", i, factorial(i)); getchar(); return 0; } int factorial(int num) { if (num == 1) return(1); else return(num * factorial(num-1)); }
//实例: 整数转二进制 #include <stdio.h> void IntToBinary(unsigned num); int main(void) { IntToBinary(255); /* 11111111 */ getchar(); return 0; } void IntToBinary(unsigned num) { int i = num % 2; if (num > 1) IntToBinary(num / 2); putchar(i ? ‘1‘ : ‘0‘); // putchar(‘0‘ + i); /* 可代替上面一句 */ }
//实例:求 1+2+3+...+n 的和 #include <stdio.h> int sum(int n) { int ret; if (n==0) return 0; if (n==1) return 1; if ( n>=2 ) ret = n + sum(n-1); return ret; } int main() { printf("sum(100)=%d\n", sum(100)); return 0; }
以上方法仅供参考!
文明看帖,谢谢勿喷!
有更好的方法欢迎交流!
原文:http://blog.csdn.net/gaoxin12345679/article/details/19575031
评论(0)