c++ - 实现递归函数

标签 c++ recursion

我对递归仍然很陌生,我想从此数组int arr[size] = {21, -6, 3, 5, 5, -3, 6, -21}返回3,以实现与递归实现相同的绝对值。

但是,我得到的值为0。我无法查明是什么使该程序没有带来期望的值。

#include <iostream>

using namespace std;

int additive_inverse_opposite_pairs_count(int* arr, int n) {
  int size = n;

  if (n == 0) {
    if (arr[n] == -1 * arr[size - 1 - n])
      return 1;
    else
      return 0;
  } else {
    int count = additive_inverse_opposite_pairs_count(arr, n - 1) + count;
    if (arr[n] == -1 * arr[size - 1 - n]) {
      count += 1;
    } else
      count = 0;
    return count;
  }
}

int main() {
  int size = 8;
  int arr[size] = {21, -6, 3, 5, 5, -3, 6, -21};
  int value = 0;

  value = additive_inverse_opposite_pairs_count(arr, size);
  cout << "value: " << value << endl;

  return 0;
}

最佳答案

问题的一部分是您正在访问arr[n],其中n是数组的大小。数组的有效索引是0..n-1,因此您需要在arr[n]语句的arr[n-1]部分中将else更改为if

一种想法是简单地从索引i开始,从该点开始扫描数组的其余部分以寻找加性逆,如果找到,则返回该数字,否则进一步递归到数组中。我编写了一个辅助函数来完成这项工作。

int helper(int* arr, int i) {
  if (i == 0) {
    return 0;
  }
  for (int j = i - 1; j >= 0; j--) {
    if (arr[i] == -arr[j]) {
      return abs(arr[i]);
    }
  }
  return helper(arr, i - 1);
}

int additive_inverse_opposite_pairs_count(int* arr, int n) {
  return helper(arr, n - 1);
}

关于c++ - 实现递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60556961/

相关文章:

c++ - 如何在 C++ 中清空套接字读/写缓冲区

Stream类型的Scala递归实现

linux:使用rsync递归复制目录,排除所有包含特定字符串的目录

c# - 如何用递归方法替换内部 Foreach 循环

c++ - VC 2015 U3 - 断言使应用程序崩溃

c++ - 链接多个 ShellExecute 调用

c++ - Matlab 到 OpenCV : mask of pixels with value inside a range

c# - 序列化代码示例中的无限循环

c++ - 递归正弦函数

c++ - 'function1' 和 'function2' 之间的歧义 (C++)