首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行递归,将数字划分为尽可能大的部分,直到达到最小的整体值为止。

运行递归,将数字划分为尽可能大的部分,直到达到最小的整体值为止。
EN

Stack Overflow用户
提问于 2022-04-29 19:45:52
回答 2查看 38关注 0票数 0

我需要接受一个数字作为输入,并连续运行递归的我的函数,直到数字是最小的素数,原来的值可以除以。我想把这个值除以返回一个整数的最小值,这样我就可以得到最少但最大的返回数。

例子如下:

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是平面长度/值是整数。

代码语言:javascript
复制
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“。

EN

回答 2

Stack Overflow用户

发布于 2022-04-29 19:52:45

if的每个分支都调用task,因此递归永远不会终止;没有“除数”可以解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2022-04-29 20:44:29

不确定我是否完全理解了您的任务,但通过您提出的示例,我使用while循环实现了这个解决方案。

代码语言:javascript
复制
public static int task(int num) {

    int div = 2;
    while ( !isPrime(num)) {
        if(isWhole(num,div))
            num = num / div;
        else
            div++;
    }

    return num;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72063020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档