我在学校的C编程作业中遇到了一些问题。我需要使用递归返回给定范围内的质数。
目前为止我写的代码如下:
#include <stdio.h>
#include <stdlib.h>
int primeNumberList(int n, int m, int z);
int main() {
int n1 = 0,
n2 = 10,
d = 2;
printf("n1 = %d | n2 = %d | d = %d\n\n", n1, n2, d);
printf("Prime Numbers between %d and %d are: \n", n1, n2);
primeNumberList(n1, n2, d);
printf("\n\n");
return 0;
}
int primeNumberList(int n, int m, int z) {
int notPrime = 0;
if (n <= 1) {
primeNumberList(n + 1, m, z);
} else
if (n < m) {
if (z <= n / 2) {
if (n % z == 0) {
notPrime = 1;
z = 2;
} else {
primeNumberList(n, m, z + 1);
}
}
if (notPrime == 0) {
printf("%d ", n);
}
primeNumberList(n + 1, m, z);
}
}
当我运行这个程序时,它会在处理到限制(在函数中是
m
(在main
中为n2
))之前的所有数字后,不会停止递归,而是以某种方式从n
中减去数字,并开始打印一些不是质数的其他数字。
当我在调试模式下运行它时,它似乎在最后循环,但没有任何东西可以循环...我尝试添加一个return 0;
甚至是一个带有一些文本的printf
,但它完全忽略了它。
有人能看出我做错了什么吗?为什么它在n < m
时不会停止?
if(n == m-1) exit(1);
添加到primeNumberList
开头是一个可行的但不太正规的解决方案。 - River