C语言:函数递归应用,不知道哪里错误1
发布网友
发布时间:2023-11-17 00:39
我来回答
共3个回答
热心网友
时间:2024-01-17 18:22
#include <stdio.h>
float abc(int);
int main()
{
float z;
int x;
printf("请输入阶乘数\n");
scanf("%d",&x);
z=abc(x);
printf ("%f",z);
return 0;
}
float abc(int n)
{
float y;
if (n==0||n==1)
y=1.0;
else y=abc(n-1)*n;
return (y);
}
错得好多,递归也没有没有返回条件
另外用float精度很低,算到20就有截取误差了追问谢谢,我是初学者,那是应该用double吗?另外递归那里你也没做多大修改,什么叫递归的返回条件
追答double 算到30也不准了,不过题目关键联系算法,无所谓了
按你的程序原来的意思就是用递归的方式去计算阶乘
按照阶乘的递归定义 n!=n*(n-1)!,那么计算下去
但是这个定义不严谨,还缺个条件就是0!=1,那就是返回的条件
你要算n!的阶乘,那么就要知道(n-1)!的阶乘,
然后你又得先找(n-2)!,那么找下去就无穷无尽了,必须有个条件然它找到头
所以你得规定0!=1,那么程序在找到0!阶乘的时候就结束递归,一个层层返回计算
热心网友
时间:2024-01-17 18:23
注意 float abc(int x);声明,放到main外面。
修改如下。再rebuild重现完全编译一下。
#include <stdio.h>
float abc(int x);
int main()
{
float z;
prtinf("请输入阶乘数");
scanf("%d",&x);
z=abc(x);
pritf ("%f",&z);
return 0;
}
float abc(int n);
{
float y;
if (y==0||y==1)
printf ("error");
else y=abc(n-1)*n;
return (y);
}
热心网友
时间:2024-01-17 18:23
好多错误,怎么只有一个
1、float abc(int x)函数声明应该放到main函数外面
2、printf拼写错误
3、pritf ("%f",&z);应该写成printf("%f",z);