标签:
1 list<int>list1; 2 void SumOfkNumber(int sum, int n) 3 { 4 // 递归出口 5 if (n <= 0 || sum <= 0) 6 return; 7 8 // 输出找到的结果 9 if (sum == n) 10 { 11 // 反转list 12 list1.reverse(); 13 for (list<int>::iterator iter = list1.begin(); iter != list1.end(); iter++) 14 cout << *iter << " + "; 15 cout << n << endl; 16 list1.reverse()//此处还需反转回来 17 } 18 19 list1.push_front(n); //典型的01背包问题 20 SumOfkNumber(sum - n, n - 1); //“放”n,前n-1个数“填满”sum-n 21 list1.pop_front(); 22 SumOfkNumber(sum, n - 1); //不“放”n,n-1个数“填满”sum 23 }
代码来自: https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/02.03.md
标签:
原文地址:http://www.cnblogs.com/david-wang/p/4342365.html