我正在学习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 []是我用来检查已计算出哪些数字的树的实现(显然,在此实现中不再相关,但仍然有用吗?)
它具有某些正确的行为,我已经完成了堆栈跟踪/调试,并且似乎有一些解决方案,但是,它并没有以正确的结果终止。我很有可能在错误的树上吠叫。
非常感谢您的反馈和帮助。
答案 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;
}