gpt4 book ai didi

c++ - 使用递归时如何摆脱这个全局变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:03 26 4
gpt4 key购买 nike

首先,我不想使用sort。这只是一个示例。这个问题的主要目的是我想:

find all possible combinations of m numbers out of n numbers and process them, then return the unique processed result (since the processed results of all possible combinations will be compared).

问题从这里开始

以下代码从 N 个数字中获取所有可能的 M 个数字组合。对 M 个数求和并找出最大的和。在这样做时,我使用了递归函数。

不过,看来我必须定义一个全局变量来存储临时的最大总和。有什么办法可以去掉这个全局变量吗?例如,定义递归函数以返回最大和...我不希望全局变量只是成为 find_sum 中的参数 &max_sum,因为 find_sum 已经有太多参数。

#include <iostream>
#include <vector>

void find_sum(const std::vector<int>& ar, std::vector<int>& combine,
int index, int start);

int max_sum =0;

int main() {
int N = 10;
int M = 3;
std::vector<int> ar(N);
ar = {0,9,2,3,7,6,1,4,5,8};

int index = 0, start =0;
std::vector<int> combine(M);
find_sum(ar, combine, index, start);
std::cout << max_sum <<std::endl;
return 0;
}

void find_sum(const std::vector<int>& ar, std::vector<int>& combine,
int index, int start) {

if(index == combine.size()) {
int sum =0;
for(int i=0; i<index; ++i) {
sum += combine[i];
}
if(max_sum < sum) {
max_sum = sum;
}
return ;
}

for(int i = start;
i < ar.size() && ar.size()-i > combine.size()-index;
++i) {
combine[index] = ar[i];
find_sum(ar, combine, index+1, start+1);
}
}

最佳答案

一种可扩展的方法是将find_sum 转换为函数对象。诀窍是定义一个 struct,它带有一个重载的 () 运算符,该运算符采用一组特定的参数:

struct FindSum
{
void operator()(const std::vector<int>& ar, std::vector<int>& combine,
int index, int start){
/*ToDo - write the function here, a very explicit way of
/*engineering the recursion is to use this->operator()(...)*/
}

int max_sum; // I am now a member variable
};

然后实例化 FindSum find_sum;,根据需要设置 find_sum.max_sum(甚至可以在 构造函数 中设置),然后调用重载() 运算符使用 find_sum(...)

此技术允许您将状态 传递给本质上是函数的内容。

关于c++ - 使用递归时如何摆脱这个全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39911416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com