下列给定程序中,函数fun的功能是∶根据形参n计算并返回阶乘!。为避免每次阶乘都要从1开始乘起,程序中使用了静态结构体变\n量old保存上次计算的阶乘。每次计算时,要比较新的参数n与上次计算的阶数n,以便决定计算方法。
时间: 2023-05-24 14:07:24 浏览: 50
去除线程锁后的程序为:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int n;
long f;
} Fact;
static Fact old = {1, 1};
long fun(int n);
int main(int argc, char const *argv[]) {
int n;
while (1) {
scanf("%d", &n);
if (n == -1) {
break;
}
printf("%d! = %ld\n", n, fun(n));
}
return 0;
}
long fun(int n) {
static int i = 0;
long result = 1;
if (n > old.n) {
for (i = old.n + 1; i <= n; i++) {
result *= i;
}
old.n = n;
old.f = result;
} else {
result = old.f;
}
return result;
}
```
函数fun的功能是计算n的阶乘,并在计算之前检查是否有上次计算的结果可用,以此来避免重复计算。同时,通过使用静态变量old,在程序多次调用fun函数时可以保存上次计算的结果。具体流程如下:
1. 定义静态结构体变量old,并初始化结构体成员n为1,f为1;
2. 接收一个整数参数n,表示需要计算n的阶乘;
3. 检查新的参数n是否大于上次计算的阶数old.n,如果是,则说明需要重新计算n的阶乘;
4. 如果需要重新计算阶乘,则从old.n + 1开始为每个整数i计算result *= i,并将结果保存到变量result中;
5. 每次计算完阶乘后,将n和计算结果f保存到变量old的对应成员中;
6. 如果新的参数n小于等于上次计算的阶数old.n,则说明可以直接使用上次计算的结果old.f;
7. 返回最终计算结果result。