用最基础的c语言打印分别编写递归和非递归的函数,求出给定自然数n (n>1)的所有(质数) 因子。例如:72 = 2*2*2*3*3
时间: 2024-12-08 11:17:27 浏览: 16
python递归函数求n的阶乘,优缺点及递归次数设置方式
在C语言中,我们可以用递归和循环两种方法来找出给定自然数n的所有质因数。这里分别给出两种方法的基本示例:
**非递归方法(循环法):**
```c
#include <stdio.h>
void find_factors(int n) {
int i;
for (i = 2; i * i <= n; i++) { // 只检查到根号n,因为大于这个数的因子必定有一个小于等于它的平方根
while (n % i == 0) { // 当i是n的因子时,去除并记录因子
printf("%d ", i);
n /= i;
}
}
if (n > 1) { // 如果n还有剩余,说明最后一个因子就是n本身
printf("%d", n);
}
}
int main() {
int n = 72;
find_factors(n);
return 0;
}
```
**递归方法:**
```c
#include <stdio.h>
int is_prime(int num, int divisor = 2) { // 判断是否为质数的基础情况
if (num <= 1)
return 0;
else if (num == 2)
return 1;
else if (num % divisor == 0)
return 0;
else
return is_prime(num, divisor + 1); // 递归处理除1和自身外的情况
}
void find_factors_recursive(int n) {
if (is_prime(n)) { // 如果n是质数,直接输出
printf("%d ", n);
} else {
int factor = 2;
while (!is_prime(n, factor)) { // 非递归部分找到下一个因子
factor++;
}
printf("%d ", factor); // 输出当前因子
n /= factor; // 更新n值,移除已知的因子
find_factors_recursive(n); // 递归处理剩下的因子
}
}
int main() {
int n = 72;
find_factors_recursive(n);
return 0;
}
```
以上代码会分别输出数字72的所有质因数。
阅读全文