拆分自然数:任何一个大于1的数,总能够拆分成若干个小于n的自然数之和,求出所有拆分后的情况。
递归算法:
#include<stdio.h>
int num[20];
void print(int j)
{
int i;
printf("%d = %d ", num[0], num[1]);
for(i = 2; i <= j; i ++)
{
printf("+ %d", num[i]);
}
printf("\n");
return;
}
void split(int k, int m)
{
int i;
if(m <= 0)
{
print(k);
}
else
{
for(i = num[k]; i <= m; i ++)
{
if(i >= num[k])
{
num[k + 1] = i;
split(k + 1, m - num[k + 1]);
}
}
}
return;
}
int main(void)
{
int n, i;
scanf("%d", &num[0]);
for(i = 1; i <= num[0] / 2; i ++)
{
num[1] = i;
split(1, num[0] - num[1]);
}
return 0;
}