什么是递归?
递归就是自己调用自己,相当于循环;
- 直接递归调用
- 间接调用:通过其他**调用
#include<stdio.h>
#include<stdlib.h>
void doHello()
{
printf("Hello, World!n");
doHello(); //doHello函数自己调用自己!
}
int mai (void)
{
doHello(); // 调用doHello函数
return 0;
}
总结:递归解决基本问题,把原有复杂的问题变成简单问题。
递归计算阶乘:n!=1×2×3×...×n(5!=5*4*3*2*1)
#include<stdio.h>
#include<stdlib.h>
long factorial(int n) //定义阶乘
{
if (n == 0)
return 1; //0 的阶乘等于 1
else
return n*factorial(n-1); // factorial() 自己调用自己
}
int main()
{
int m; //
long r; // 计算出的阶乘
printf("请输入m的值:n");
scanf("%dn",&m);
r = factorial(m);
printf("m的阶乘是:%dn",r);
return 0;
}
使用迭代(循环结构)-递归(选择结构)
递归的缺点是反复调用函数占用额外的空间!
使用迭代(循环计算阶乘):
#include<stdio.h>
#include<stdlib.h>
long iterative( int n )
{
int i;
long r = 1;
for(i = 1;i <= n;i++)
r*=i //r= r*i
return r;
}
int main()
{
int m; //
long r; // 计算出的阶乘
printf("请输入m的值:n");
scanf("%dn",&m);
r = iterative(m); //函数调用
printf("m的阶乘是:%dn",r);
return 0;
}