c++ - N的被加数的不同组合

标签 c++ recursion

<分区>

程序要写,N的自然被加数有多少种不同的组合。所有的被加数不大于,则K(N,K<=120)。 我的程序只包含递归:

int  F (int x,int s)  // s- total number, which is necessary to lay down the terms of
{
if (s == 0) // when total number == 0
    {
        ans++;   
        return 0;
    }
for (int i=x;i<=min(k,s);i++) // x - previous term
    F(i,s-i);           // we add a new summand -> subtract that number from the amount
}

主要部分:

int main ()
{
 cin >> n>> k;
 F(1,n);
 cout << ans;
}

那么,你能帮我更快地完成我的程序吗?

最佳答案

您可以添加内存。无需为固定的 x 和 s 多次计算 F。 它需要稍微更改您的代码(使 F 实际上返回计算值而不是递增 ans)并添加一个数组来保存已经计算出的值。

关于c++ - N的被加数的不同组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24406702/

相关文章:

java - 递归地替换二维数组中的内部数组

c++ - C/C++中的内存分配

java - 卡在 Java 递归难题上

php - 将扁平数组反转为多维

java - 检查数组是否包含具有递归和某些限制的 int

java - 在java中使用递归的带有L系统的龙曲线

c++ - 带有 constexpr 的编译时命名参数习语

c++ - 如何将 OpenCV 的 Mat 结构的部分图像矩阵加载到我自己的 3x3 数组中?

c++ - 如何使用 -std=c++11 : ‘auto_ptr’ is deprecated 解决 g++ 警告

c++ - 返回具有 uint16_t 值的偏移量