我的搜索没有产生任何结果.另外,我的英语非常糟糕,对不起.
所以我的程序应该这样做:
#include#include #include 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; }
当输入为1时,它输出6,正如它应该的那样.
当输入<1时,输出"Error0,000000".
当输入> 1时,它只输出添加的数字
return 1/2*rec(n-1)+4;
在这种情况下,它输出4.为什么?rec(n-1)== 0?
我的问题是:
为什么它不起作用?
当输入<1时,如何输出"Error"而不是"Error0,000000"?
P.P... 6
整数师!
这里,
return 1/2*rec(n-1)+4;
1/2
0
由于整数除法会产生收益率.所以它总是4
作为最终结果.
相反,你可以这样做:
return 1.0/2*rec(n-1)+4;
这将确保计算发生为double
.
您可能只想添加return 0
; 在这种if (n<1)
情况下,将函数definitio更改为:
float rec(int n) {... }
如果没有指定类型的n
,则默认为int
预C99.但在C99和C11中已不再是这种情况.
整数师!
这里,
return 1/2*rec(n-1)+4;
1/2
0
由于整数除法会产生收益率.所以它总是4
作为最终结果.
相反,你可以这样做:
return 1.0/2*rec(n-1)+4;
这将确保计算发生为double
.
您可能只想添加return 0
; 在这种if (n<1)
情况下,将函数definitio更改为:
float rec(int n) {... }
如果没有指定类型的n
,则默认为int
预C99.但在C99和C11中已不再是这种情况.