楼梯问题——理解基本逻辑

Posted

技术标签:

【中文标题】楼梯问题——理解基本逻辑【英文标题】:Staircase Problem - understanding the basic logic 【发布时间】:2019-10-24 13:49:29 【问题描述】:

这是楼梯问题的递归版本(有 N 个楼梯,站在底部的人想爬到顶部。这个人可以一次爬 1 个楼梯、2 个楼梯或 3 个楼梯。数数人可以通过不同的方式达到顶峰。)

public static int findStep(int n) 
     
        if (n == 1 || n == 0)  
            return 1; 
        else if (n == 2)  
            return 2; 

        else
            return findStep(n - 3) +  
                   findStep(n - 2) + 
                   findStep(n - 1);     
    

我的问题是,为什么我们在 n=0 时返回 1 ??

对我来说,n=0 意味着没有更多的楼梯,所以它应该返回 0,但如果我这样做了,那么程序就不适用于其他非零输入。我在这个网站上看到了类似的问题,但没有一个可以解释为什么我们在没有更多楼梯时返回 1。

【问题讨论】:

我明白你的意思了。 【参考方案1】:

这是一个选择问题。将重复视为选择和排序零个或多个 1、零个或多个 2 和零个或多个 3 的组合的方法数,它们的总和为n。只有一种方法可以为n = 0 做出这样的选择:选择无。

【讨论】:

【参考方案2】:

在此代码中n=0 表示在最后一步中n 等于123。换句话说:

n-1=0表示在最后一步n=1,所以有一种方法可以到达楼梯的顶部。

n-3=0 表示在最后一步n=3,因此到达楼梯顶部的一种方法是制作3 台阶。

【讨论】:

这是不正确的。如果我们调用findStep(0),最后一步不是1、2或3。 是的,如果你一开始用0调用方法(没有楼梯),它会返回错误的结果。我所做的,在调用该方法之前检查 n 是否为 0。这样它总是会正确回答。【参考方案3】:

我的问题是,为什么我们在 n=0 时返回 1 ??

这意味着,只有一种可能的方式到达第一级楼梯。您可以通过https://medium.com/trick-the-interviwer/the-staircase-problem-9840b11201a5了解更多信息

【讨论】:

以上是关于楼梯问题——理解基本逻辑的主要内容,如果未能解决你的问题,请参考以下文章

【算法题】12.爬楼梯问题

动态规划--爬楼梯

关于SVM数学细节逻辑的个人理解:从基本形式转化为对偶问题

翻译(7w)

使用 Java 理解程序逻辑 基本问答?

无法理解汇编逻辑