C# 猴子可以走2步或3步-有多少种不同的方法到达顶端?
所以基本上,我试图递归地和动态地解决这个问题。 问题听起来是这样的:有n级台阶的楼梯如果猴子只能跳过1级或2级台阶(她不能只跳下一级台阶),那么有多少种不同的方式可以到达顶端 假设我们有4个台阶的楼梯——只有一条路2-2=1(如果她试图跳过3条——她不能只跨下一条就到达顶部) 5个步骤可以是:2-3和3-2=2种方式。(我们可以说“超过1步跳跃”=2步。“超过2步跳跃”=3步) 因此,这听起来与通常的“可以采取1或2个步骤,有多少种方法?”问题类似,但因为有“2或3个步骤”——不知何故,这让我感到困惑 我的解决方案递归地如下所示:C# 猴子可以走2步或3步-有多少种不同的方法到达顶端?,c#,algorithm,dynamic-programming,C#,Algorithm,Dynamic Programming,所以基本上,我试图递归地和动态地解决这个问题。 问题听起来是这样的:有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;
}
}
static int F1(int n,int方式)
{
如果(n<0)返回0;
如果(n>0)返回F1(n-2,方式)+F1(n-3,方式);
其他的
{
如果(n==0)路++;
返回方式;
}
}
但我不知道如何动态地做到这一点,即使在看了1和2个步骤的类似问题之后。这里有什么不同?如果有人解决了类似的问题,我们将非常感谢您的帮助。稍微不同的版本。没有理由将
方式
作为输入传递,步骤
用于诊断:
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;
}
如果
n<0
?这已经是一个“动态”解决方案(正确的说法是动态规划)-它根据子问题的解决方案计算问题的解决方案(尽管还不正确)。@Henkholtman编辑,感谢您的注意-如果编辑是正确的ofc。@meowgoethedog我所说的动态方法是这样的:在“动态编程解决方案”中,还是我理解的不正确所以我写的不是递归方法?一个算法可以是DP和递归的;事实上,递归通常是实现DP方法的最自然的方式。感谢您提供了一个更好的实现-您知道使用动态方法会是什么样子吗?正如其他人所评论的,我在这里没有看到非动态的。