小议递归算法

来源:互联网 发布:电脑配置升级软件 编辑:程序博客网 时间:2024/05/30 23:04

一,含义:

  在函数或子过程的内部,直接或者间接地调用自己的算法。

二,特点:

  (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;}

以上方法仅供参考!

文明看帖,谢谢勿喷

有更好的方法欢迎交流!




0 0
原创粉丝点击