我编写了以下递归代码,但结果很奇怪.请帮忙找出我C代码中的错误.
例如,如果我将值n
视为10
,则输出应为2,3,5,7,11,13,17,19,23,29
但是对于我的代码,输出是2 3 5 7 9 11 13 15 17 19
啊!我试了很久,但就是找不到问题所在.下面是我的递归C代码:
void primeNumbers (int n)
{
if (n == 0)
return;
static int i = 2;
if (isPrime(i))
{
printf("%d ", i);
i++;
primeNumbers(n - 1);
}
else
{
i++;
primeNumbers(n);
}
}
判断数字是否为素数的函数:
bool isPrime(int n)
{
// edge case, not a base case
if (n <= 1)
return false;
static int i = 2;
if (i > n / 2)
return true;
if (n % i == 0)
return false;
i++;
return isPrime(n); // call again with i+1 value
}
输出:[如果N是10]
2 3 5 7 9 11 13 15 17 19
如果我将值n
作为10
,那么输出应该是2,3,5,7,11,13,17,19,23,29
,但在我的代码中,输出是2 3 5 7 9 11 13 15 17 19
.