数据结构刚入门....来问一道题,要求用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;
}