【发布时间】:2012-11-18 11:22:46
【问题描述】:
我试图找出给定数字是否是给定集合的总和,
例如:数字12是集合s{3,2}的总和,
因为:
3+3+3+3=12
or
2+2+2+2+2+2=12
但14 不是s{8,10} 的总和,因为您不能用sums of s 创建数字14。
我正在尝试仅使用递归而不使用循环在 java 中编写代码。
这是代码:
public static boolean isSumOf(int[]s,int n)
{
return isSumOf(s,n,0,0,0);
}
private static boolean isSumOf(int[]s,int n,int i,int sum,int m)
{
boolean with=false;
boolean without=false;
if(i==s.length)
return false;
if(sum==n)
return true;
if(m<=n)
{
with=isSumOf(s,n,i,sum+s[i]*m,m++);
without=isSumOf(s,n,i,sum,m++);
}
else
{
i=i++;
m=0;
isSumOf(s,n,i,sum,m);
}
return (with||without);
}
代码编译正常,但是当我对其运行测试时出现 stackOverFlowError。 这是测试的代码:
public static void main(String[]args)
{
int[]a={18,10,6};
int x=18+10+6;
System.out.println(Ex14.isSumOf(a,x));
}
请帮忙!!!
【问题讨论】:
-
只是好奇.. 为什么对这个问题投反对票?我认为它明确指定了 OP 想要什么。还有他试过的代码吗?
-
堆栈溢出表明您的代码没有终止。您是否通过一个简单的示例逐步使用调试器来查看为什么您的
return语句没有执行? -
我建议您重命名方法中的变量。很难确定
n、i和m指的是什么。它也可以帮助您发现错误。
标签: java recursion sum subset stack-overflow