我需要接受一个数字作为输入,并连续运行递归的我的函数,直到数字是最小的素数,原来的值可以除以。我想把这个值除以返回一个整数的最小值,这样我就可以得到最少但最大的返回数。
例子如下:
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是布尔人。如果输入值是素数,则检查素数返回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);
}
}由于无限递归,我会遇到堆栈溢出的问题,任何关于如何增加除数的想法,如果这个数字没有可能的红利,它只会将这个数字返回为"plankLength“。
发布于 2022-04-29 19:52:45
if的每个分支都调用task,因此递归永远不会终止;没有“除数”可以解决这个问题。
发布于 2022-04-29 20:44:29
不确定我是否完全理解了您的任务,但通过您提出的示例,我使用while循环实现了这个解决方案。
public static int task(int num) {
int div = 2;
while ( !isPrime(num)) {
if(isWhole(num,div))
num = num / div;
else
div++;
}
return num;
}https://stackoverflow.com/questions/72063020
复制相似问题