gpt4 book ai didi

java - 用 Java 递归分解,处理 StackOverflow

转载 作者:行者123 更新时间:2023-12-04 05:02:16 25 4
gpt4 key购买 nike

我需要编写一个方法来将数字递归分解到 1234567890,我当前的应用程序在抛出 StackOverflowError 之前只处理小数字。我知道我的问题是递归调用太多,但我不知道如何减少我的调用次数。

它需要递归。

我认为解决方案与我的算法背后的数学有关。我看过不同的迭代解决方案,但我似乎无法用更少的调用递归地执行它。代码:

public static boolean isPrime(int input, int i) {
if (i <= 2) {
return true;
}
if (input % i != 0) {
return isPrime(input, i-1);
} else {
factors(input, i);
return false;
}
}
public static void factors(int input, int i) {
if (i <= 1) {
System.out.printf(" %d", 1);
} else {
if (input % i == 0) {
System.out.printf(" %d", i);
}
factors(input, i - 1);
}
}

并由以下内容启动:
System.out.println("What integer would you like to factor?");
num1 = scan.nextInt();
if(isPrime(num1, num1 - 1)){
System.out.println("Input is a prime number");
} else {
System.out.println(" factors\nInput isn't a prime number.");
}

最佳答案

我认为它需要递归的原因是因为这是一个家庭作业问题。因此,我不会告诉你如何去做,而是告诉你你的数学有什么问题。您的算法看起来部分正确,除了 (a) 您忘记将 'n' 除以您找到的每个因子,以及 (b) 您正在从大数向下而不是小数向上寻找因子。最好开始和 2 并计数到 sqrt(n) 虽然这不会解决堆栈溢出。

您需要在循环中查找因子并保留使用递归(如果您真的需要使用它)在除掉质因子后对剩余数字进行因式分解。因为您不想通过一个 6 位数的质数,然后需要 100 万个堆栈级别来证明它没有因数。即这需要在一个简单的循环而不是递归中:

返回 isPrime(input, i-1);

...这可以是递归的:

因素(输入,我);

关于java - 用 Java 递归分解,处理 StackOverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15997543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com