您的位置:首页 > 其它

数字拆分--递归

2016-03-06 20:43 267 查看
将一个数字拆分为几个自然数相加的形式,列举出所有可能。

比如:

输入:5

输出:

1 + 1 + 1 + 1 + 1

1 + 1 + 1 + 2

1 + 1 + 3

1 + 2 + 2

1 + 4

2 + 3

5

#include<stdio.h>
#define N 1001
int rec
;
//start:当前拆分出的数
//pos:保存到rec数组的位置记录
//left_num:上一轮拆分后,还剩下的数
void print(int n){
int i;
for( i=0;i<n-1;i++){
printf("%d+",rec[i]);

}
printf("%d\n",rec[n-1]);
return;
}
void dfs(int start,int pos,int left_num){
if(left_num==0){
print(pos);
return;
}
int i;
for(i=start;i<=left_num;i++){
rec[pos]=i;
dfs(i,pos+1,left_num-i);
}
return;
}
int main(void){
int n;
scanf("%d",&n);
dfs(1,0,n);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: