如何使用递归编写Java函数以生成质数?
发布时间:2023-05-21 00:11:35
在计算机科学中,递归是一种函数调用自身的技术。使用递归可以为某些问题提供一种更优雅,更简单的解决方案。
生成质数是计算机科学中的一个常见问题。质数是大于1且只能被1和它本身整除的数字。因此,一个质数不能被任何小于或等于它的其他数字整除。
使用递归编写Java函数以生成质数的方法如下:
步:编写一个函数来检查给定数字是否是质数。此函数应采用递归方法。如果数字是2或3,则该函数将返回true;否则,该函数将递归调用自身,检查数字是否可以被小于它的所有奇数整数整除。
代码如下:
public static boolean isPrime(int n) {
if (n == 2 || n == 3) {
return true;
}
if (n == 1 || n % 2 == 0) {
return false;
}
for (int i = 3; i <= Math.sqrt(n); i += 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
第二步:编写一个函数来生成指定数量的质数。该函数应采用递归方法。如果要生成0个质数,则返回一个空数组;否则,该函数将递归调用自身,生成指定数量的质数,直到生成了足够的质数。
代码如下:
public static int[] generatePrimes(int n) {
if (n == 0) {
return new int[]{};
}
int[] primes = generatePrimes(n - 1);
int newPrime = primes[primes.length - 1] + 1;
while (!isPrime(newPrime)) {
newPrime++;
}
int[] newPrimes = new int[primes.length + 1];
System.arraycopy(primes, 0, newPrimes, 0, primes.length);
newPrimes[primes.length] = newPrime;
return newPrimes;
}
在这个函数中,我们首先检查递归的基本情况 - 如果n为0,则返回一个空数组。
否则,我们从方法中递归调用自身,生成前n-1个质数。然后,我们生成下一个质数,将其添加到数组中,并将新数组返回。
为了生成下一个质数,我们从前一个质数加1开始,在从奇数中查找质数。我们跳过所有偶数,并从 个奇数开始。当我们找到一个质数时,我们将其返回,并将其添加到数组中。
最后,我们可以为任何数量的质数调用该函数,如下所示:
public static void main(String[] args) {
int[] primes = generatePrimes(20);
for (int i = 0; i < primes.length; i++) {
System.out.println(primes[i]);
}
}
这将输出前20个质数:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71
