楼梯问题——理解基本逻辑
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
等于1
或2
或3
。换句话说:
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了解更多信息
【讨论】:
以上是关于楼梯问题——理解基本逻辑的主要内容,如果未能解决你的问题,请参考以下文章