运行递归,将数字分成尽可能大的部分,直到得到最小的整数值



我需要取一个数字作为输入,不断递归我的函数,直到该数字是原始值可以被整除的最小素数。我想把这个值除以返回整数的最小值,这样我就得到了最小但最大的返回数。

在下面的示例:

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;
}

最新更新