Python I';我在试着理解如何打印一个数组的所有可能的组合 i=start; 而(i=r-指数): 数据[索引]=arr[i]; 组合Util(arr,数据,i+1, 结束,索引+1,r); i+=1;
我很难理解为什么需要“end-I+1>=r-index”这个条件,我试过运行代码,不管有没有,它都会产生相同的输出,我想知道是什么边缘情况导致这个条件返回FalsePython I';我在试着理解如何打印一个数组的所有可能的组合 i=start; 而(i=r-指数): 数据[索引]=arr[i]; 组合Util(arr,数据,i+1, 结束,索引+1,r); i+=1;,python,algorithm,recursion,combinations,backtracking,Python,Algorithm,Recursion,Combinations,Backtracking,我很难理解为什么需要“end-I+1>=r-index”这个条件,我试过运行代码,不管有没有,它都会产生相同的输出,我想知道是什么边缘情况导致这个条件返回False 尝试将变量分成更容易理解的部分,例如 i = start; while(i <= end and end - i + 1 >= r - index): data[index] = arr[i]; combinationUtil(arr, data, i + 1,
尝试将变量分成更容易理解的部分,例如
i = start;
while(i <= end and end - i + 1 >= r - index):
data[index] = arr[i];
combinationUtil(arr, data, i + 1,
end, index + 1, r);
i += 1;
现在我们可以这样解释:
int values_left_to_print = r - index; // (size of combination to be printed) - (current index into data)
int values_left_in_array = end - i + 1; // number of values left until the end of given arr
顶层函数将开始与1形成组合,然后与2形成(1,2,3),(1,2,4),(1,3,4)
它不会尝试3和4,因为(数组中的值\u left\u
如果条件不存在,则函数将尝试3和4,但序列中的值在给定数组中仅从左到右增加索引,因此组合将结束,因为i
将在能够找到3个值之前到达end
我不确定你是想理解这个(不完整的)片段还是想解决这个问题。如果是后者:我试图理解这个片段,完整的代码在链接中提供。
for (int i = start; i <= end && (values_left_in_array >= values_left_to_print); i++)
{
arr = {1,2,3,4}
n = 4; // size of arr
r = 3; // size of combination