C递归不会递归

-2 c recursion function

我的搜索没有产生任何结果.另外,我的英语非常糟糕,对不起.

所以我的程序应该这样做:

https://i.imgur.com/Ss8Oa2R.png

#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?

我的问题是:

  1. 为什么它不起作用?
  2. 当输入<1时,如何输出"Error"而不是"Error0,000000"?

P.P*_*.P. 6

整数师!

这里,

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中已不再是这种情况.