写一段C语言代码:用递归的方式求某一个正整数的所有划分数,写出具体划分过程并且不可以重复输出。
时间: 2024-02-12 07:07:23 浏览: 133
好的,这里是代码:
```c
#include <stdio.h>
void print_partition(int n, int m, int* arr, int len) {
// 如果n减到0,说明找到了一组划分
if (n == 0) {
for (int i = 0; i < len - 1; i++) {
printf("%d + ", arr[i]);
}
printf("%d\n", arr[len - 1]);
return;
}
// 从m开始往下减
for (int i = m; i >= 1; i--) {
// 如果i大于n,说明i不能再减
if (i > n) {
continue;
}
// 将i加入到数组中
arr[len] = i;
// 递归求解
print_partition(n - i, i, arr, len + 1);
}
}
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
int arr[n];
printf("%d的划分数有:\n", n);
print_partition(n, n, arr, 0);
return 0;
}
```
这段代码使用了递归的方式求解一个正整数的所有划分数,运行后会输出所有的划分过程,并且不会重复输出。
阅读全文