【发布时间】:2018-09-21 23:06:22
【问题描述】:
你有一个装有球的盒子,我们从盒子里取出所有的球
但是我们可以一次拉一个或一次拉三个
提取顺序很重要。
问题是有多少种不同的方法可以把球拉出来?
所以如果:
盒子里有 1 个球,只有 1 种方式。
盒子里有 2 个球,只有 1 种方式。
盒子里有 3 个球,有 2 种方式(一次拉 1 个或三个)
盒子包含 4 个球,有 3 种方式:
1111
13
31
给定的是 7 个球以 9 种不同的方式从盒子中取出球
所以问题是盒子里有多少球,
我想出的解决方案是递归的:
Int calculate(int balls){
If(balls=0) return 0;
If(balls=1) return 1;
If(balls=2) return 1;
If(balls=3) return 2;
If(balls=4) return 3;
return calculate(balls-1) + calculate(balls-3);
}
这是正确的吗?
有没有不使用递归的方法?
谢谢
【问题讨论】:
-
@user648026 递归是正确的。您可以为此研究 DP 解决方案。
-
oeis.org/A000930 包括各种计算方法。
-
0球的答案不清楚;对我来说更自然的答案是 1,然后当 balls=3 时,您就可以开始使用递归公式了。
标签: algorithm