【问题标题】:C recursive function - Calling function in main displays incorrect valuesC递归函数 - 在main中调用函数显示不正确的值
【发布时间】:2016-03-09 17:54:20
【问题描述】:

没错,我必须编写一个递归函数,它接受两个值并计算用户输入的两个值之间所有数字的总和。

例如,如果用户将 4 作为第一个值,将 7 作为第二个数字,它应该将总和打印为 22。作为 4+5+6=7 = 22。

到目前为止,我编写的这段代码可以正常工作,但输出错误。

#include <stdio.h>

int sum( int x, int max )
{ 
  if (x = max)
      return x;

  else
      return (x + sum( x+1, max));      
}

int main()
{
  int min, max;

  printf("Enter your min value: ");
  scanf("%i", &min);

  printf("Enter your max number: ");
  scanf("%i", &max);

  printf("\n");

  printf(" %i\n %i\n", sum(min, max)); //calls the sum function and prints out the sum of the range of values

  return 0;     
}

正如您在底部图像中看到的那样,它不会打印出正确的答案,它只会打印出最大值 (7) 以及奇数负数。

我的感觉是,我在最后一个 printf 的 main 中调用了错误的 sum 函数。我是函数新手,所以我不太确定发生了什么。

如果有人可以帮助新手,那就太好了。

谢谢,GR412。

【问题讨论】:

  • 回顾“检查相等性”。 5号线
  • 如果它给出了错误的输出,你所说的“某种作品”是什么意思?
  • @JohnColeman 对于很多人来说,'sort of works' 意味着编译器停止了哭泣。 :\
  • @JohnColeman 我不确定这是否是一个新手要说的东西,但如果有什么东西为我编译,它在我的脑海中“有点工作”。当然它实际上不起作用。但它运行。
  • 负数是未定义行为的结果。 main() 中的最后一个 printf 有一个格式字符串,它需要 2 个整数参数,但您只提供 1 个整数参数。

标签: c function recursion sum


【解决方案1】:

试试这个:

int sum(int x, int max)
{
    if (x == max)
        return x;
    return max + sum(x, max - 1);
}

你最后的打印功能应该是这样的

printf(" %i\n", sum(min, max));

因为你的 sum 函数只返回一个值,但你告诉 printf 打印出两个整数。

【讨论】:

    【解决方案2】:

    电话:

    sum(x+1,max);
    

    有问题,最好有:

    x++;
    sum(x,max);
    

    虽然我不确定这是你错误的原因。

    【讨论】:

    • 这不是错误的原因,并且通过值传递我不明白您为什么认为它有问题
    • 我看到了问题:如果计算,递归函数需要自己的auto变量来存储中间结果。
    • 看没问题。只要修复了=== 的错字,OP 的功能就会正常工作。由于您的回答与实际问题无关,并且损害了您的代表,您真的要保留它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2021-06-11
    • 2022-01-24
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多