c语言编写整数划分程序,C语言之整数划分问题(递归法)实例代码
时间: 2024-03-25 14:38:47 浏览: 76
C语言之整数划分问题(递归法)实例代码
5星 · 资源好评率100%
下面是一个使用递归法实现整数划分的 C 语言代码示例:
```c
#include <stdio.h>
void integerPartition(int n, int m, int* arr, int index) {
if (n == 0) { // 达到划分目标,输出结果
for (int i = 0; i < index; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return;
}
if (m <= 0 || n < 0) { // 超出划分范围,返回
return;
}
arr[index] = m; // 把当前数加入到数组中
integerPartition(n - m, m, arr, index + 1); // 继续划分
integerPartition(n, m - 1, arr, index); // 换一个数继续划分
}
int main() {
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
int arr[n]; // 存放划分结果的数组
printf("%d的划分结果为:\n", n);
integerPartition(n, n, arr, 0);
return 0;
}
```
该程序使用了递归的方式实现整数划分,具体实现如下:
1. 当目标值 `n` 为 0 时,表示已经达到了划分目标,此时输出结果并返回。
2. 当当前的数 `m` 小于等于 0 或者 `n` 小于 0 时,表示已经超出了划分的范围,直接返回。
3. 把当前的数 `m` 加入到存放划分结果的数组中,然后分别以 `n-m` 和 `m` 作为新的目标值继续递归划分。当以 `n-m` 作为目标值时,由于不能出现重复的划分结果,因此从 `m` 开始递归;当以 `m` 作为目标值时,可以出现重复的划分结果,因此从 `m-1` 开始递归。
阅读全文