问题描述
帮助那里的程序员我遇到一个问题
special-background-class
如果我得到与用户输入(con)匹配的结果,则必须制作数组的子集并将其单独添加({1,2} = 1 + 2),输出将为YES或NO。现在我面临的问题是我不知道如果用户输入的数组大小为4,那么用户输入将给出多少大小,将需要4个循环。我的子程序在任何大小的数组上都能工作吗 p.s:对不起,我的英语不好
解决方法
这是递归实现函数的简单示例:
bool Check(int *arr,int size,int con,int curr_sum = 0)
{
for (int i = 0; i < size; i++)
{
int new_sum = curr_sum + arr[i];
if (new_sum == con
|| Check(arr + i,size - i,con,new_sum))
{
return true;
}
}
return false;
}
这是它的工作原理...
我们传递了一个curr_sum
参数,该参数保存了父递归的总和。当前的递归将通过向其添加所有索引来寻找curr_sum + arr[i] == con
。如果不是,那么我们将采用新的总和(curr_sum + arr[i]
),并从当前正在查看的索引开始,对索引进行另一轮递归。
注意::这是您正在使用的O(n ^ 2)实现,因此随着您的使用,它会非常慢(并且由于这是递归操作,容易导致堆栈溢出)处理更大的数组。