先把问题一般化:
设台阶的数目为n, 走法是f(n)
首先注意到
n = 1,只有一节台阶, 那么f(n) = 1
n = 2,f(n) = 2
n = 3,f(n) = 4 (1, 1, 1) (2, 1) (1, 2) (3) 这四种走法
对于比较大的数字,注意最后一步,可能走了1节,也可能走了2节,也可能走了3节
如果走1节,那么可能性一共有f(n-1)种,如果走2节,可能性一共f(n-2)种,3节就是f(n-3)种
于是得到f(n) = f(n-1) + f(n-2) + f(n-3) (n >= 4)
这是一个斐波那契数列的变形,那么就可以用之前的方法来计算
代码:- #include <stdio.h>
- int main()
- {
- int i;
- long long int step[36+1] = {0, 1, 2, 4};
- for(i = 4; i!=36+1; ++i)
- step[i] = step[i-1] + step[i-2] + step[i-3];
- printf("%lld\n", step[36]);
- return 0;
- }
复制代码 |