什么是打印所有唯一的正整数因子组合的最有效的算法.例如,如果给定的数字是24,则输出应该是
24*1 12*2 8*3 6*4 6*2*2 4*3*2 3*2*2*2
这里注意到当打印6 * 4时,4 * 6不会被打印出来.因此,基本上这是一个不考虑订单的唯一子集的问题(一种查看问题的方法).但目标是具有运行最快的功能,因此将数据存储在数据结构中以进一步操作可能会消耗更多的时间.我已经尝试过我的算法并粘贴了我的代码,但似乎没有给我所需的结果,我在递归调用中犯了一些错误.你能帮我找出一个有效的方法吗?
public static void printfact(int num){ int temp=0; for(int i=num-1;i>=num/2;i--){ if(num % i == 0){ temp = num/i; System.out.println(temp + " * " + i); if(isprime(i)==false){ System.out.print(temp + " * "); printfact(i); } } } }
解决方法
尝试这种递归方法,它还需要2个输入,即一个字符串来传递i的for current的当前值,以执行后续的减少,还有一个temp int知道何时不打印重复的反转,即8 * 3和3 * 8.
public static void printFactors(int number,String parentFactors,int parentVal) { int newVal = parentVal; for (int i = number - 1; i >= 2; i--) { if (number % i == 0) { if (newVal > i) { newVal = i; } if (number / i <= parentVal && i <= parentVal && number / i <= i) { System.out.println(parentFactors + i + "*" + number / i); newVal = number / i; } if (i <= parentVal) { printFactors(number / i,parentFactors + i + "*",newVal); } } } }