我的搜索没有产生任何结果.另外,我的英语非常糟糕,对不起.
所以我的程序应该这样做:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
float rec();
int main()
{
setlocale(LC_ALL,"");
int w;
scanf("%d",&w);
printf("%f",rec(w));
return 0;
}
float rec(n)
{
if (n<1)
{
printf("Error");
}
else if (n==1)
{
return 6;
}
else if (n>1)
{
return 1/2*rec(n-1)+4;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当输入为1时,它输出6,正如它应该的那样.
当输入<1时,输出"Error0,000000".
当输入> 1时,它只输出添加的数字
return 1/2*rec(n-1)+4;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它输出4.为什么?rec(n-1)== 0?
我的问题是:
整数师!
这里,
return 1/2*rec(n-1)+4;
Run Code Online (Sandbox Code Playgroud)
1/20由于整数除法会产生收益率.所以它总是4作为最终结果.
相反,你可以这样做:
return 1.0/2*rec(n-1)+4;
Run Code Online (Sandbox Code Playgroud)
这将确保计算发生为double.
您可能只想添加return 0; 在这种if (n<1)情况下,将函数definitio更改为:
float rec(int n) {... }
Run Code Online (Sandbox Code Playgroud)
如果没有指定类型的n,则默认为int预C99.但在C99和C11中已不再是这种情况.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |