C中的递归函数以查找任意数量N的算术组合

时间:2018-11-01 11:16:49

标签: c math recursion

我正在学习C。我的问题是:给定一系列数字

1 * + 2 * + 3 * + 5 .... * + 9

其中数字1到9可以通过加,乘或两者的任意组合来创建数字n,例如:

1 + 2 + 3 + 4 * 5 * 6 * 7 * 8 * 9 = 60486

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

很明显,有一组数字可以通过上面的各种组合表示。我的递归函数应该返回数字N在上述格式中有多少个不同的唯一表示形式。

到目前为止,我一直在解决以下问题:

int recCheckSolutions(int n, int idx, int tree[], int cnt, int sum)
{
    if (n == sum)
        return 1;
    if (idx > 9)
        return 0;
    if (sum >= n)
        return 0;
    cnt += recCheckSolutions(n, idx + 1, tree, cnt, sum += idx);
    cnt += recCheckSolutions(n, idx + 1, tree, cnt, sum *= idx);
    return cnt;
}

函数的调用方式如下:

int solutions = recCheckSolutions(n, 0, tree, 0, 0);

其中n是我们要查找其组合的所需数字 sum是用于查看我们在计算中所处位置的整数变量 并且tree []是我用来检查已计算出哪些数字的树的实现(显然,在此实现中不再相关,但仍然有用吗?)

它具有某些正确的行为,我已经完成了堆栈跟踪/调试,并且似乎有一些解决方案,但是,它并没有以正确的结果终止。我很有可能在错误的树上吠叫。

非常感谢您的反馈和帮助。

1 个答案:

答案 0 :(得分:-1)

除了返回条件外,您已经掌握了大多数事情:

int recCheckSolutions(int n, int idx, int tree[], int cnt, int sum)
{
    if (idx == 9)
        return 1;
    cnt += recCheckSolutions(n, idx + 1, tree, cnt, sum += idx);
    cnt += recCheckSolutions(n, idx + 1, tree, cnt, sum *= idx);
    return cnt;
}