我需要取一个数字作为输入,不断递归我的函数,直到该数字是原始值可以被整除的最小素数。我想把这个值除以返回整数的最小值,这样我就得到了最小但最大的返回数。
在下面的示例:
616/2 ->308
308/2 ->154
154/2 ->77
77/2 ->!38.5
77/3 ->!25.6
77/4 .....
77/11 ->11
答案是11,因为它是最大的整数
我当前的递归代码:
方法checkPrime和isWhole是布尔值。如果输入值是素数,则Check prime返回true,如果木板长度/值是整数,则isWhole返回true。
public static int task(int plankLength,int value) {
if (checkPrime(value) && isWhole(plankLength,value)) {
int holdNum = plankLength/value;
value++;
return task(holdNum,value);
} else {
value++;
return task(plankLength, value);
}
}
由于无限递归,我得到堆栈溢出问题,关于如何增加除法数的任何想法,如果数字没有可能的红利,它将返回该数字为"浮游长度">
if
的每个分支调用task
,所以你的递归永远不会终止;没有"除数"。这样就能解决问题了。
我不确定我是否完全理解你的任务,但是根据你提出的例子,我使用while循环到达了这个解决方案。
public static int task(int num) {
int div = 2;
while ( !isPrime(num)) {
if(isWhole(num,div))
num = num / div;
else
div++;
}
return num;
}