编辑代码

#include<stdio.h> 

void  f1(int n, int arr[], int k){  //未去重复 
    if(n==0){ //递归出口
    	int sum = 0 ;
        for(int i=0; i<k; i++){
            sum += arr[i] ;
        }
       printf("%d = ",sum) ;
        for(int i=0; i<k-1; i++){
            printf("%d + ",arr[i]) ;
        }
        printf("%d\n",arr[k-1]) ;
        }
     for(int i=1; i<=n; i++){
         arr[k] = i;
         f1(n-i, arr, k+1);
     }
    }

void f2(int n, int arr[], int k){  //去除重复 
        if(n == 0){
            int sum = arr[0] ;
            for(int i=1; i<k; i++){
                if(arr[i] < arr[i-1]){
                    return ;
                }else{
                    sum += arr[i] ;
                }
            }
           printf("%d = ",sum);
            for(int i=0; i<k-1; i++){
                printf("%d + ",arr[i]);
            }
            printf("%d\n",arr[k-1]);
        }
        for(int i=1; i<=n; i++){
            arr[k] = i ;
            f2(n-i, arr, k+1);
        }
    }


int main(){
    int n = 5;
    int array[n];
    
    f1(n, array, 0);
    printf("---------------------------------\n");
    f2(n, array, 0) ;
    
}