c++ - 实现递归函数
问题描述
我对递归还是很陌生,我想从这个数组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
一个想法是简单地从一个 index 开始,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);
}
推荐阅读
- sqlite - 是否可以在没有分隔符的情况下将 .txt 文件中的数据加载到 sqlite?
- eclipse - 如何从 Eclipse Neon 连接到 SAP Web IDE Full-Stack?
- react-native - 如何在 Webview 中添加水平加载器
- javascript - 原型中自定义函数和原生函数的区别
- mysql - 数据截断:截断不正确的日期值错误
- android - 在哪里可以找到 JAR/AAR 版本的 AndroidX 库?
- akka - system.teminate() 没有在 akka 中调用 CoordinatedShutdown 的所有阶段
- java - 多线程在完成处理之前返回数字(JAVA)
- r - R - 为由另一列分组的列中每次出现的值分配递增索引
- architecture - Instagram 之类的服务如何缓存经常查看的图片