在递归函数中查找最大数字

时间:2016-02-09 18:16:08

标签: c++ recursion

我试图在冰雹序列中找到最大的数字,但我对递归是相当新的。这段代码适用于某些数字,但对于像27或678这样的数字,它会冻结,而且我花了很多时间试图找出原因。

int next(int n)
{
  if(n != 1)
  {
    if(n % 2 == 0)
    {
      return n/2;
    }
    else
    {
      return (n*3)+1;
    }
  }
  return n;
}
int haillargest(int begin)
{
  int nhail = next(begin);
  if(begin == 1)
  {
    return begin;
  }
  else if(haillargest(nhail) > begin)
  {
    return haillargest(nhail);
  }
  else
  {
   return begin;
  }
}

我使用递归错误吗?

2 个答案:

答案 0 :(得分:0)

你在 haillargest 中弄错了支票并返回了值。当我清理演示文稿时它消失了:

#include <stdio.h>
#include <stdlib.h>

int next(int n)
{
  if(n == 1) return n;
  if(n % 2 == 0) return n/2;
  return (n*3)+1;
}

int haillargest(int begin)
{
  static nest = 0;
  int nhail = next(begin);
  int result, new_num;

//  printf("Enter %d %d %d\n", nest++, begin, nhail);

  if (begin == 1)
    result = 1;
  else {
    new_num = haillargest(nhail);
    if (new_num > begin)
      result = new_num;
    else
      result = begin;
  }

//  printf("Leave %d %d\n", --nest, result);
  return result;
}

main() {
printf("%d %d\n",  27, haillargest(27));
printf("%d %d\n", 678, haillargest(678));
}

输出:

27 9232
678 4372

答案 1 :(得分:0)

您可以将当前“largestSoFar”号码传递给该函数的下一次迭代,并将其与下一个数字进行比较。

$image