我需要写一个recusive接收整数的函数num
并返回方程 的解数:x1 + x2 + x3 = num
, where x1,x2,x3
是 1-10 之间的数字,该方法应打印所有解决方案。
例如如果num=3
然后该方法将打印1+1+1
并将返回1
.
if num=5
该方法将返回6
并将打印:
1 + 1 + 3
1 + 2 + 2
1 + 3 + 1
2 + 1 + 2
2 + 2 + 1
3 + 1 + 1
if num<3
or num>30
该方法将返回0
.
该方法应该是递归的,不使用循环。不允许使用全局变量。列表也是不允许的。
这是我的代码,它工作正常,但它也打印重复项,例如num=5
它打印:
3 + 1 + 1
2 + 2 + 1
2 + 1 + 2
2 + 2 + 1
1 + 3 + 1
1 + 2 + 2
2 + 1 + 2
1 + 2 + 2
1 + 1 + 3
这是我的代码:
public static void main(String[] args) {
System.out.println("num of solutions: "+solutions(5));
}
public static int solutions(int num)
{
if (num < 3 || num > 30)
return 0;
return solutions(num, 1, 1, 1);
}
private static int solutions(int num, int x1, int x2, int x3)
{
if (x1 < 1 || x1 > 10 || x2 < 1 || x2 > 10||x3 < 1 || x3 > 10)
return 0;
if (x1 + x2 + x3 > num)
return 0;
if (x1 + x2 + x3 == num)
{
System.out.println(x1 + " + " + x2 + " + " + x3);
return 1;
}
return solutions(num, x1 + 1, x2, x3) + solutions(num, x1, x2 + 1, x3) + solutions(num, x1, x2, x3 + 1);
}
如何获得所需的输出而不重复?