我正在研究一个递归问题,其中一个孩子可以一次以 1,2 或 3 步跳 n 级楼梯。我正在查看的代码是类似于斐波那契之类的函数。但是,我不明白的是,如果 n==0,为什么它会返回 1。如果总步数为 0,不应该有零种攀登方式吗?为什么只有一种方法可以爬上去?
int f(int n)
{
if(n<0)
return 0;
else if(n==0)
return 1;
else
return f(n-1) + f(n-2) + f(n-3);
}
我正在研究一个递归问题,其中一个孩子可以一次以 1,2 或 3 步跳 n 级楼梯。我正在查看的代码是类似于斐波那契之类的函数。但是,我不明白的是,如果 n==0,为什么它会返回 1。如果总步数为 0,不应该有零种攀登方式吗?为什么只有一种方法可以爬上去?
int f(int n)
{
if(n<0)
return 0;
else if(n==0)
return 1;
else
return f(n-1) + f(n-2) + f(n-3);
}
这更像是一个逻辑问题。假设你站在那里什么也不做。你爬了多少级?答案是零。那么,你成功爬上零台阶了吗?是的。
爬零楼梯有几种方法?只有一种方法:你必须站在那里,不要爬任何台阶。
这不是一个真正有效的问题。
因为这是一个递归实现,所以您总是必须提供一个边界情况,f(nmin)
即 where nmin
is 1 小于最低的 valid n
。
所以这种情况n = 0
是一个边界条件,用于确保所有值的正确结果n > 0
。
换句话说,它(可能)没有任何意义,或者,它可能意味着与你认为的不同的东西。它所要做的就是确保f(1)
.
不,没有0
办法上0
楼梯,就像0/0
不等于一样0
。这是一个不确定的结果。