数据结构刚入门....来问一道题,要求用C调试通过
设m,n均为自然数,m可表示为一些不超过n的自然数之和,试编写函数f(m,n)计算这种表示方法的数目。例如:f(5,3)=5:3+2、3+1+1、2+2+1、2+1+1+1、1+1+1+1+1
#include <iostream> #include <list> using namespace std; list<int> g_list; void show() { list<int>::const_iterator beg = g_list.begin(), end = g_list.end(); while (beg != end) { cout << *beg << ' '; ++beg; } cout << endl; } void f(int n) { if (1 == n) { return; } int i = 1; int j = n/2; while (i <= j) { g_list.push_front(n-i); g_list.push_front(i); show(); g_list.pop_front(); f(i); g_list.pop_front(); g_list.push_front(i); f(n-i); g_list.pop_front(); ++i; } } int main() { f(20); return 0; }