题目:输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m。要求将所有的可能组合列出来(背包问题求解)
解法:运用递归的方法来进行处理,首先我先解释一下我的理解
假如我们取n=10,m=8;
我们列出 1 2 3 4 5 6 7 8 9 10
我们建立一个选择数组,数组的长度即为n的大小
数组里的每个元素与1..n 一 一 对应
数组元素的表示只有两种情况:1代表选择了其对应的数,0则代表未选择对应的数
我们从这堆数的左右边开始选择
10,9是肯定是不选的(当然这是n>m的情况,我们可以使n=m,在进行以下)
我们可以选8或不选8
7,6...等等都是这样
直到选择的数相加为m
我们输出选择的数字
即分为选n F(n-1,m-n)
不选n F(n-1,m