转载请注明原文出处:http://blog.csdn.net/baidu_37107022/article/details/75125846
Q题目
编程求解
输入两个整数 n 和 m,从数列1,2,3…….n 中随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
Answer解法
这道题就是一道典型的动态规划问题了,思路和背包问题差不多,m就相当于背包能容纳的重量了,就是从右往左校验,通过m,以及m-n进行下一次计算。
2.1 逻辑分析
首先判断,如果n>m,则n中大于m的数不可能参与组合,此时置n = m;
将最大数n加入且n == m,则满足条件,直接输出;
将n分两种情况求解
(1)n没有加入,取n = n-1; m = m;递归下去
(2)n加入,取n = n-1, m = m-n,递归下去
当前是 : printList( m , n )
递归下一层是 : printList( m , n-1 ) 和 printList( m-n , n-1 )