我有一个更大的编程问题,要求我首先能够判断一个数组是否包含可以累加目标值的任何元素组合。
我的功能必须有以下标题:
bool sumCombination(const int a[], int size, int target);
该函数必须使用递归,并且不得使用任何for循环,而循环或单词' goto'在它的任何地方。此外,我不能使用任何辅助函数。
该功能如何运作的一些例子如下:
sumCombination([2, 4, 8], 3, 10) => true
sumCombination([2, 4, 8], 3, 12) => true
sumCombination([2, 4, 8], 3, 11) => false
sumCombination([], 0, 0) => true
我不确定如何使用递归来解决这个问题,而且我与之合作的每个人都告诉我,在给定的参数范围内似乎无法做到。我用循环解决了这个问题。但是,我试图通过递归完全解决这个问题,而不使用任何循环。
如果有人能帮我理解这个问题背后的逻辑,我将非常感激!
提前谢谢!
答案 0 :(得分:2)
bool sumCombination(const int a[], int size, int target) {
// Can always add up to zero.
if (!target) return true;
// No elements to add up to anything.
if (!size) return false;
return
// Try including the first element, see if tail adds up to the rest.
sumCombination(a + 1, size - 1, target - a[0]) ||
// Finally, try the tail alone, without the first element.
sumCombination(a + 1, size - 1, target);
}