【发布时间】:2018-12-08 10:43:51
【问题描述】:
我们可以递归打印给定数字以下的所有素数吗?例如,如果调用 printPrimes(10),它应该打印 2,3,5,7。我可以递归检查单个数字是否为素数并逐个迭代“n”。但我想知道是否可以使用纯递归解决方案。
【问题讨论】:
我们可以递归打印给定数字以下的所有素数吗?例如,如果调用 printPrimes(10),它应该打印 2,3,5,7。我可以递归检查单个数字是否为素数并逐个迭代“n”。但我想知道是否可以使用纯递归解决方案。
【问题讨论】:
发布我的一个 cmets 作为答案: 您可以通过一个接受一个参数的递归方法来完成它,最初发送 n 并在每个后续递归调用中减少它,直到它达到 1,这是您递归的终止条件。这将使您的 API 更干净
以下是Java中的代码:
public void printPrimesBelow(int n) {
if(n > 1) {
if(isPrime(n)) {
System.out.println(n);
}
printPrimesBelow(n-1); // recurse over n-1
}
}
小修改:
如果您将递归调用放在if 语句上方,则打印它们的素数的顺序将增加。
【讨论】:
所以你已经有了一个检查单个数字是否为素数的函数?那么确定
public void printNPrimes(int start, int n){
if (start == n)
return;
if (isPrime(start))
System.out.print(start);
printNprimes(start + 1 , n );
}
用 printNprimes(0 , n) 调用这个函数; n 是你想要达到的数字
【讨论】:
n 并在随后的每个递归调用中减少它,直到它达到 1,这是您递归的终止条件。这将使您的 API 更加简洁,因为用户不必弄清楚将什么作为第一个和第二个参数传递。