【发布时间】:2021-05-29 15:40:12
【问题描述】:
我想创建一个递归方法来查找使用 +/- 的数字的所有可能组合,例如具有特定长度: 输入:
- 长度:6
- 数量:3
对于输出:
- 1 + 2 + 3 - 4 - 5 + 6 = 3
- 1 + 2 - 3 + 4 + 5 - 6 = 3
- 1 - 2 - 3 - 4 + 5 + 6 = 3
你能解释一下我该怎么做吗? 谢谢你。
【问题讨论】:
-
可能有无限种情况
我想创建一个递归方法来查找使用 +/- 的数字的所有可能组合,例如具有特定长度: 输入:
对于输出:
你能解释一下我该怎么做吗? 谢谢你。
【问题讨论】:
好吧,假设“所有组合”必须从 1 (1, 2, 3, ..., n) 开始的自然数 生成,您可以实现如下所示:
using System.Linq;
...
// Here we generate all possible formulae and their sums:
// 1 - 2 - 3 - 4 - 5 - 6
// 1 - 2 - 3 - 4 - 5 + 6
// 1 - 2 - 3 - 4 + 5 - 6
// 1 - 2 - 3 - 4 + 5 + 6
// ...
// 1 + 2 + 3 + 4 + 5 + 6
private static IEnumerable<(string formula, int sum)> GenerateRecursive(int number) {
if (number == 1)
yield return ("1", 1);
else
foreach (var pair in GenerateRecursive(number - 1)) {
yield return ($"{pair.formula} - {number}", pair.sum - number);
yield return ($"{pair.formula} + {number}", pair.sum + number);
}
}
// Here we query formulae generated for having required sum
private static IEnumerable<string> SolveFor(int target, int count) {
return GenerateRecursive(count)
.Where(item => item.sum == target)
.Select(item => $"{item.formula} = {item.sum}");
}
然后
Console.Write(string.Join(Environment.NewLine, SolveFor(3, 6)));
结果:
1 - 2 - 3 - 4 + 5 + 6 = 3
1 + 2 - 3 + 4 + 5 - 6 = 3
1 + 2 + 3 - 4 - 5 + 6 = 3
【讨论】: