基本案例背后的直觉用于计算步骤数
Intuition behind the base case for counting the number of steps
我在在线帮助下对以下解决方案进行了编码。基本上,目的是找到一个人可以爬上n
步骤的方式的数量,如果他可以在每个步骤上爬上1
或2
步骤。
class Solution {
public:
int climbStairs(int n) {
if(n<0)
return 0;
//what is the logic used for the following return?
if(n==0)
return 1;
return climbStairs(n-1)+climbStairs(n-2);
}
};
虽然我或多或少地意识到自己在做什么,但如果要爬升的步骤数为 0
,我无法理解返回1
背后的直觉。由于我们可以迈出长度的1
或2
,因此,如果要爬升的步骤是0
,那么我们不应该仅返回0
(因为无法采取长度的1
或2
的步骤)?不幸的是,如果我返回0
。
有人可以解释到底发生了什么以及返回1
的直觉(而不是0
)?
,而不是以几种不同的方式来思考它,您可以采取多种措施,而是考虑到n
时可以达到最高的方式来考虑它距离攀登的台阶。如果n == 0
您有一种方法可以到达顶部:留在原处。那是直觉。
实际原因是,如果没有n == 0
的定义,则需要两个基本案例,n == 1
和n == 2
可以为所有n > 0
获取正确的答案。然后,您可以自由地解决n == 0
的正确答案。
根据请求,这就是为什么climbStairs(0)
为0,您需要其他基本案例。(嗯,要么需要其他基本案例,要么需要更改递归公式。)每当n
不是基本情况时,都会定义climbStairs(n)
就climbStairs(n-1)
和climbStairs(n-2)
而言。如果将n == 0
情况定义为0,那么,正如您注意到的那样,您将无法获得n == 1
或n == 2
的正确答案。因此,您必须将这些定义为其他基本案例。(仅修复n == 1
仍然不会给n == 2
给出正确的答案。)一旦建立了其他基本案例,递归公式将继续为所有n > 2
提供正确的答案。
有一种方法可以爬上楼梯:什么都不做。或者,您可以数学上想到它:一个空总和为0。
如果您对该直觉感到不舒服,则可以重新示出代码以消除零案例:
int climbStairs(int n) {
if (n == 1) return 1; // 1
if (n == 2) return 2; // 1+1 or 2
return climbStairs(n-1) + climbStairs(n-2);
}
附带您的实际问题,但是此功能是斐波那契序列,并且有更好的方法(例如:线性或日志时间而不是指数)来计算它。
当一个人爬楼梯时,假设他通过爬上楼梯从A点到B点。现在,正如人们很容易理解的那样,A和B之间有一些a和b之间的垂直距离,而a和b之间的水平距离是每个楼梯的维度。
'Could someone please explain what exactly is going on and the intuition behind returning 1 (instead of a 0)?'
现在,当有0楼梯时,A和B之间没有垂直距离。但是," B"水平距离必须覆盖,并且需要1步。
如果我们在 n == 0
和 n < 0
时返回0,则两个基本案例都将返回0,并且我们始终将获得0作为最终答案,因为return climbStairs(n-1)+climbStairs(n-2);
始终执行0 0。不用担心,甚至根本可以"攀登"具有零步骤的梯子 - 这与使程序提供正确的答案有关。
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- C++用于计算移动平均线的程序
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 应该如何编写用于计算最近点距离的C++函数?
- 递归函数,用于计算 BST 中具有两个子节点的节点数
- RPN计算器使用头文件进行计算操作和堆栈;用于堆栈的矢量
- 用于计算字符串中元音的函数
- 用于在C++中计算用户数据的线程
- 用于计算文本宽度的模块
- 用于计算周长和面积的程序,而不是从 void 函数输出值
- 计算 1 - sqrt(x) 用于小参数 x (~10^-12),类似于 expm1(在 C/C++ 中)
- 用于计算统一子字符串权重的代码
- 递归函数用于计算 n 个数字之和的意外输出
- 一个递归函数,用于计算 n-airy 树的高度
- 浮点计算可以用于任何可靠的函数,特别是容器和算法吗?
- 计算用于CAFFE分类的HDF5数据集的平均值
- MFC 用于计算控件的高光、阴影等的算法或函数是什么?
- 递归函数,用于计算数字中的位数
- 在unix/win32上高效计算用于日志记录的日期/时间戳
- 如何计算用于调用函数的线程数