c语言求助
程序填空。打印 2!,4!,6!,…… 20!的值。要求在fact函数中不使用循环语句,利用静态局部变量的特点求得阶乘的值。#include <stdio.h>
doublefact(intn);
int main()
{
inti;
for(i=2; i<=20; i+=2)
printf("%d != %.0f\n", i, fact(i));
return0;
}
doublefact(intn)
{
/*-----请填上适当的语句-----*/
}
#include <stdio.h>
double fact(int n)
{
static double factorial = 1;
if (n == 0 || n == 1)
{
return factorial;
}
else
{
factorial *= n;
return fact(n - 2);
}
}
int main()
{
int i;
for (i = 2; i <= 20; i += 2)
{
printf("%d! = %.0f\n", i, fact(i));
}
return 0;
}
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2023-12-18 20:59
#include
double fact(int n)
你好,答案不对 乔治爱啃脚趾 发表于 2023-12-18 21:09
你好,答案不对
非常抱歉,给你带来了困惑。下面是修正后的代码:
#include <stdio.h>
double fact(int n){
static double factorial = 1;
if(n == 0 || n == 1){
return factorial;
}
else{
factorial *= n;
return fact(n-2);
}
}
int main(){
int i;
for(i = 1; i <= 20; i++){
printf("%d! = %.0lf\n", i*2, fact(i*2));
}
return 0;
}
这段代码中,我们利用了静态局部变量的特点存储阶乘的值。在fact函数中,递归地计算阶乘,每次乘以n,然后调用自身继续计算下一个偶数的阶乘。在main函数中,我们使用for循环遍历2到20,每次打印出对应偶数的阶乘结果。
希望这次能解决您的问题!如果还有任何疑问,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 doublefact(intn)
{
static double r = 1 ;
r = r * (n - 1) * n ;
return r ;
} FishC 发表于 2023-12-18 21:09
非常抱歉,给你带来了困惑。下面是修正后的代码:
4的阶乘应该是24而代码给出的结果是16 乔治爱啃脚趾 发表于 2023-12-18 21:18
4的阶乘应该是24而代码给出的结果是16
非常抱歉,给你带来了混淆。下面是修正后的代码:
#include <stdio.h>
double fact(int n){
static double factorial = 1;
if(n == 0 || n == 1){
return factorial;
}
else{
factorial *= n;
return fact(n-1);
}
}
int main(){
int i;
for(i = 2; i <= 20; i += 2){
printf("%d! = %.0f\n", i, fact(i));
}
return 0;
}
这段代码使用递归的方式计算阶乘,利用静态局部变量 `factorial` 来保存阶乘的结果。注意在 `main` 函数中,我们从 2 开始循环,每次增加 2,这样就能得到 2!、4!、6!...20! 的值,并打印出来。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]