这程序该如何运用递归法进行编?
递推法,算出n可以拆分的数据个数。题目的意思是:
一个整数n n<=100)可以有多种分划,使其分划的一列整数之间和为n,例如:
输入n=6
输出:
6
5 1
4 2
4 1 1
3 3
3 2 1
3 1 1
2 2 2
2 2 1 1
2 1 1 1 1
1 1 1 1 1 1
#include <stdio.h> #include <stdlib.h> #define MAX 100 int min(int m,int n) { return m<n?m:n; } void split(int n,int nLast,int *a,int t) /* n表示现在要拆分的数字; nLast表示上一次拆出的数;这次拆出的数要小于或等于上次拆出的数 a为存放前面拆出的数的数组的指针,待到要拆的数为0时依次输出数组中的数值 t表示数组中已有元素的个数*/ { int i; if(n>0) /*如果要拆的数大于0*/ for(i=min(n,nLast);i>0;i--) /*从n本身开始拆分,同时保证这次拆分的数不大于上次*/ { a[t]=i; /*拆分出i,把i加入数组a*/ split(n-i,i,a,t+1); /*继续拆分剩下的数*/ } else /*如果要拆分的数为0,停止拆分,直接输出数组*/ { for(i=0;i<t-1;i++) printf("%d ",a[i]); printf("%d\n",a[t-1]); } } void main() { int m; int a[MAX+1]; a[0]=1; printf("Please input n:"); scanf("%d",&m); split(m,m,a,0); }