小议递归算法

时间: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
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!