Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 猴子可以走2步或3步-有多少种不同的方法到达顶端?_C#_Algorithm_Dynamic Programming - Fatal编程技术网

C# 猴子可以走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个步骤”——不知何故,这让我感

所以基本上,我试图递归地和动态地解决这个问题。 问题听起来是这样的:有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方法的最自然的方式。感谢您提供了一个更好的实现-您知道使用动态方法会是什么样子吗?正如其他人所评论的,我在这里没有看到非动态的。