最近讲到了递归,老师布置了一道经典的整数划分问题,浏览了网上很多代码,还是似懂非懂,想找张清晰地展现递归过程的图片也没有,今天想了想,自己画了一张才发现,想完整清晰地表现这个过程确实真的很难,情况太多,一层一层递归,每层还有循环。因此我也只是画了一点点,不过总体思路大致是一样的。本人水平有限,图也相当粗糙,放上来希望有所帮助,如有错误,欢迎指正。
题目:将一个整数划分为多个整数想加的形式,并输出有所划分方法。
例:6的划分:
6=5+1
6=4+2
6=4+1+1
6=3+3
6=3+2+1
6=3+1+1+1
6=2+2+2
6=2+2+1+1
6=2+1+1+1+1
6=1+1+1+1+1+1
具体代码如下:
#include <stdio.h> //记录分解情况
int mark[100];
int n;
void divide(int now, int k, int pre);
int main()
{
scanf("%d", &n);
divide(0, 0, n - 1);
return 0;
}
//now记录数组当前长度,k记录递归深度, pre记录前一个的值
void divide(int now, int k, int pre)
{
int i;
//数组长度大于n就返回
if(now > n) return;
if (now == n){
printf("%d=", n);
for(i = 0; i < k - 1; i++){
printf("%d+", mark[i]);
}
printf("%d\n", mark[i]);
} else {
for(i = pre; i > 0; i--){
if( i <= pre){
mark[k] = i;
now += i;
divide(now,

&spm=1001.2101.3001.5002&articleId=62887055&d=1&t=3&u=f908d7831a704dcda5cd560c4670c6be)
1672

被折叠的 条评论
为什么被折叠?



