一,含义:
在函数或子过程的内部,直接或者间接地调用自己的算法。
二,特点:
(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;
}
以上方法仅供参考!
文明看帖,谢谢勿喷!
有更好的方法欢迎交流!