举例:用递归方法求n;
#include
int main()
{
int n;
int y;
printf("input a integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%d\n",n,y);
return 0;
}
int fac(int n)
{
int f;
if(n<0)
printf("n<0,data error!");
else if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return(f);
}
return用法:
return返回一个数值的意思就是把return<表达式>后面表达式的值返回给调用他的函数。举个例子:
int sum(int i,int j)
{
return i+j;
printf("这个语句不会被执行,因为该子函数执行到上面的return语句就无条件结束了");
}
main()
{
int a=10,b=11,c;
c=sum(a,b);
printf("%d",c);
}
程序的输出为:
21
这个21从何而来呢main函数调用sum(a,b)函数时将a的值赋给i,b的值赋给j,上面说了return i+j;会计算i+j的值也就是结果等于21,并将21带回给调用它的函数,即c=sum(a,b);相当于c=21,这个21就是由sum(a,b)中的return反回来的。
n的阶乘,就是从1开始乘到n,即1*2*3*...*(n-1)*n。
即n!=1*2*3*...*(n-1)*n。
而(n-1)!=1*2*3*...*(n-1)。
所以可以得出,n!=(n-1)! * n。
由这个概念,可以得出递归求阶乘函数fact的算法:
1 如果传入参数为0或1,返回1;
2 对于任意的n,返回n*fact(n-1)。
代码如下:
int fact(int n)
{
if(n == 0 || n == 1) return 1;
return n*(fact(n-1));
}
递归求阶乘
第二个就是主函数啊,它用10调用了fun函数,就是求10的阶乘,输出为10!=3628800。
第一个return求的是n>1时的阶乘,这样一层一层地找下去,处理递归并返回结果。第二个return前面省略了else,也就是当不满足n>1这个条件时执行的,是判断递归的边界,返回的是1的阶乘的答案,如果没有这个return,递归就没有边界,一直进行下去,就会造成栈溢出。
PS:我也是刚学,说的可能不是很好,希望对你有帮助!