在书中,我遇到以下问题:
给定N阶楼梯,如果一次使用1、2或3阶,则可以爬多少条路?
以下是本书给出的代码:
int countWays(int n){ if(n<0) return 0; if(n == 0) return 1; else return countWays(n-1) + countWays(n-2) + countWays(n-3); }
在理解此代码时,我有以下担忧:
我不明白为什么要为n = 0返回1。如果有0步,那么显然我们不必爬任何步,应该返回0。
对于n = 3,函数返回4,但我只能看到3种情况,即(1,1,1),(1,2),(3)。
当没有台阶时,您只是不爬而经过,这是唯一的一种方法。正如评论之一所指出的那样,它可以表示为()。
()
实际上有4种情况:(1,1,1),(1,2),(2,1),(3)。