所以基本上我试图以递归和动态方式解决这个问题。 问题听起来像这样:有“n”步的台阶如果她只能跳过1步或2步(她不能跳到下一步),那么猴子可以通过多少种方式到达顶部。
让我们说我们有4个台阶的楼梯 - 只有一种方式2-2 = 1路(如果她尝试跳过3 - 她不能踩到下一个到达顶部)。
5个步骤可能是:2-3和3-2 = 2种方式。 (我们可以说“超过1步跳跃”= 2步。“超过2步跳跃”= 3步)
所以这听起来与通常类似“可以采取1步或2步,有多少种方式?”问题,但因为有“2或3步” - 不知何故,它让我感到困惑。
我的解决方案递归地看起来像这样:
static int F1(int n, int ways)
{
if (n < 0) return 0;
if (n > 0) return F1(n - 2, ways) + F1(n - 3, ways);
else
{
if (n == 0) ways++;
return ways;
}
}
但即使看了1和2步的类似问题,我也不知道如何动态地做到这一点。这有什么不同?会感激某种帮助,或者如果某人有这样的东西解决了。
答案 0 :(得分:2)
略有不同的版本。没有理由将ways
作为输入传递,steps
用于诊断:
static int F1(int n, string steps)
{
if (n == 0)
{
Console.WriteLine(steps);
return 1;
}
else if (n > 0)
{
return F1(n - 3, steps + "3") + F1(n - 2, steps + "2");
}
// else: no dice, invalid outcome
return 0;
}