(1)
#include<stdio.h>
int main(){
long fac(int);
for(int i=1;i<10;i++)
printf("%d!=%ld\n",i,fac(i));
}
long fac(int x){
static long p=1;
return p=p*x;
}

分析:在主函数中定义i=1,在循环中当i<10时,先输出i!=fac(i),i的值根据上面循环来定,在函数fac(i)中先把i的值带入函数中的x中去,定义了静态函数p=1(p不随函数的循环重新定义),返回p=p*x到fac(i)里面,再进行i++,最后返回循环判断i是否小于10,如果是就继续循环、不是就结束循环。
(2)
#include<stdio.h>
int main(){
long fac(int);
for(int i=1;i<10;i++)
printf("%d!=%ld\n",i,fac(i));
}
long fac(int x) {
long p=1;//或 auto long p=1;
return p=p*x;
}

分析:在主函数中定义i=1,在循环中当i<10时,先输出i!=fac(i),i的值根据上面循环来定,在函数fac(i)中先把i的值带入函数中的x中去,定义了长整型p=1(p随函数的循环重新定义),返回p=p*x到fac(i)里面,再进行i++,最后返回循环判断i是否小于10,如果是就继续循环、不是就结束循环。
(3)
#include<stdio.h>
long p=1;
int main(){
long fac(int);
for(int i=1;i<10;i++)
printf("%d!=%ld\n",i,fac(i));
}
long fac(int x) {
return p=p*x;
}

分析:这次p定义在了最开始既不在主函数也不在子函数中,因此p的值会随着子函数而变动,在主函数中定义了i=1,在循环中当i<10时,先输出i!=fac(i),i的值根据上面循环来看,在函数fac(i)中先把i的值带入函数中的x中去,返回p=p*x到fac(i)里面,再进行i++,最后返回循环判断i是否小于10,如果是就继续循环、不是就结束循环。
这篇博客分析了C语言中递归函数中使用静态变量和局部变量的区别。在第一个例子中,静态变量`p`在函数调用间保持其值,导致每次调用`fac(i)`时累积乘积。第二个例子中,局部变量`p`在每次调用时都会被重置,因此无法保存之前的状态。第三个例子中,全局变量`p`在所有函数调用中共享,同样累积乘积。这三个例子展示了不同变量作用域对程序行为的影响。
6002





