【问题标题】:Recursive function that returns highest value from array从数组中返回最大值的递归函数
【发布时间】:2021-08-07 06:46:37
【问题描述】:

我需要编写一个递归函数,它从一个填充有整数的一维数组中返回最大值,最后一个值是 0(零),它标志着有用值的结束 的数组。它需要没有静态值,并且函数具有的唯一参数是指向数组的指针。该函数的默认结构类似于 - 整数最大值(整数 * arr); - 我尝试解决它,但我能想出的唯一解决方案是我需要多个参数才能从中获得最高值。 我想到了类似将一个值与数组中的下一个值进行比较,但我想不出如何返回最高值,示例如下。

int max(int* arr){
if(*(arr)!=0) 
{
    if (*(arr) > *(arr+1)){
        return max(arr+1);
    }else{
        return max(arr);
    }
}
return *(arr);

}

【问题讨论】:

  • 嗨,欢迎来到 SO。请不要将代码发布为图片,这使得它很难工作。相反,将其作为文本发布。谢谢!
  • 为什么需要使用递归?
  • 这肯定是一道作业题。让别人为你解决问题,你不会学到任何东西。我给你一个提示。计算出 max 函数在每次调用时会查看什么,以及它将如何与从递归内部调用返回的 max 进行比较。想想它会如何结束。
  • 我已经尝试了几个小时,感谢您的提示。我还修复了图像问题,对不起,我是 SO 新手。

标签: c recursion


【解决方案1】:

您可以检查最后一个值以退出递归:

int max(int *arr)
{
// The next value is the flag, so the maximum when you have only the last element will be itself
   if(arr[1] == 0) 
       return *arr;
   
   //you check the maximum in the recursion
   int temp = max(arr + 1);

   //you compare the result from you recursion with the current element and return it.
   if(temp > *arr)
      return temp;
   else
      return *arr;
}

【讨论】:

  • 你为什么需要 else 呢?你确实意识到你在做他的功课,而他不会学习。
  • @hookenz 我不需要其他的。它似乎更具说教性。 learning 部分在于他的态度:他会尝试理解代码还是简单地复制粘贴?我不能为他做决定,我只是提供一些帮助。
  • 这是我老师推荐的一本书的练习,我只是想不通我的一生,我想问我的老师,但我就是想不通这就是为什么我发布它。我目前正在使用 python 导师查看代码,这是比较数组中的变量的一种非常酷的方法。谢谢!!
  • max() 在数组只有 [0] 时失败,因为当前代码访问数组外。我认为if(arr[0] == 0) return *arr; 会解决这个问题。嗯,负数有点麻烦。 temp == 0 时跳过比较仍然可行。
  • @chux-ReinstateMonica 我注意到了,但是由于函数应该返回一个整数......空列表的最大元素是多少?我认为列表应该至少有一个元素。我试图把它放在答案中,但是要考虑的 IF 太多,它会超出递归范围。
猜你喜欢
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2019-01-12
  • 2021-06-11
  • 2021-06-03
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多