当前位置:  开发笔记 > 编程语言 > 正文

C递归不会递归

如何解决《C递归不会递归》经验,为你挑选了1个好方法。

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

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

https://img.devbox.cn/3cccf/16086/243/89e8e7df87d832a6.png

#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/20由于整数除法会产生收益率.所以它总是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中已不再是这种情况.



1> P.P...:

整数师!

这里,

return 1/2*rec(n-1)+4;

1/20由于整数除法会产生收益率.所以它总是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中已不再是这种情况.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有