来自数组中元素分解的所有可能组合

时间:2014-10-02 07:23:11

标签: c recursion tree recurrence

例如,如果我有这个数组:{2,3,1}第一个元素可以在{0,1,2}中分解,第二个元素在{0,1,2,3}和第三个元素中分解{0,1}中的一个。因此,我必须使每一个组合的总和成为可能。

example:

0,1,0
0,0,0
0,3,1
2,3,1
.....

我对这个问题的想法就是制作一种这样的树。

        0                 1                2
  |   |   |   |     |   |   |   |    |   |   |   |
  0   1   2   3     0   1   2   3    0   1   2   3
 | | | | | | | |   | | | | | | | |  | | | | | | | |
 0 1 0 1 0 1 0 1   0 1 0 1 0 1 0 1  0 1 0 1 0 1 0 1

所以我的想法是制作一个Recursive函数来得到总和:

1) move from top to bottom and when i find the limit change the move.
2) move from left to right, and when i find the limit in the right i return.
3) go back and move to the right, and back to the first step.

这是我的代码:

void tree(int*A, int i,int n,int j,int mov){
    if(mov){ ///move from up to bottom.
        if(i==n){ ///n is the large of the array.
           return; ///
           tree(A,i-1,n,j+1,0);
        }
        tree(A,i+1,n,j,1);
    }
    else{ ///move from left to right.
        if(j>A[i]){ ///j is decomposition of the element.
            return;
        }
        tree(A,i,n,j+1,0);
    }
}

我没有赚到任何金额,我只是试图回顾所有可能的组合。但它不起作用。当函数找到限制时,我认为这是一个问题。

我真的想自己解决这个问题,但我现在处于一个死角,也许需要了解一些关于递归函数的东西,所以请不要提供完整的解决方案,我想要通过我的方式学习。我只是想知道我能做些什么。这是解决这个问题的最佳方法吗?

另外,请说明问题是否清楚,我的英语是基本的,所以我有问题来表达我想要的东西。

0 个答案:

没有答案