C语言函数递归调用的问题
求n!程序如下:
#include<stdio.h>
void main()
{
long int fac(int n);
int n;
scanf("%d",&n);
printf("%ld",fac(n));
}
long int fac(int n)
{
long int c;
if(n==1)
c=1;
else
c=fac(n-1)*n;
return(c);
}
我觉得算法上面,程序也可以改成:
#include<stdio.h>
void main()
{
long int fac(int n);
int n;
scanf("%d",&n);
printf("%ld",fac(n));
}
long int fac(int n)
{
long int c;
if(n==1)
c=1;
else
{
c++;
c=fac(n-1)*c;
}
return(c);
}
但是我自己改的程序运行结果是错误的,是不是因为C语言函数递归调用里面规定递归的这个公式只能出现与递归次数n相关的值或函数,而不能出现其他变量(比如c),因为函数的递归调用只能调用与n相关的值或函数(即只能调用与被调用函数有关的值)?
[ 本帖最后由 killah 于 2013-3-3 21:04 编辑 ]