我需要找到选择k
数字的方法的数量,这些数字加n
,1<= k <= n
。这些数字不得重复。我正在尝试递归解决方案,我认为这会遇到无限循环。
void noofways(int firstnumchosen,int sum,int numofnum)
{
if(sum<0)
return;
if(sum==0 && numofnum!=0)
return;
if(sum==0 && numofnum==0){
globalcount++;
return;
}
if(numofnum<=0)
return;
// not choosing the first number
noofways(firstnumchosen+1,sum,numofnum);
//choosing the first number
noofways(firstnumchosen+1,sum-firstnumchosen,numofnum-1);
}
globalcount
是一个全局变量。要使用3个数字得到7的总和,我将调用函数noofways(1,8,3);
。为了使自己更清楚,解决方案集由(1,2,5),(1,3,4)等组成。
为什么fdoes我的函数无限运行?
答案 0 :(得分:3)
noofways(x, y, z)
调用noofways(x+1, y, z)
,因此x无限增长。
您需要测试x是否太大并在参数检查期间返回:
if (firstnumchosen > something)
return;
这不是唯一的问题,但它是无限循环的原因。