【C语言】20个阶梯,一次只能走1或2阶,有多少种走法。
/* 有20阶阶梯,一次只能上1或2阶阶梯,问有多少种走法的求解 */
/*
分析:
一阶阶梯的时候只有一种走法,
两阶阶梯的时候有两种走法,
三阶的时候,假设第一下跨了两阶,那还剩一阶阶梯,走法数与只有一阶的时候相同;
假设第一下跨了一阶,还剩两阶,走法数与有两阶的时候相同;
那三阶的时候就是两阶的走法数加上一阶时的走法数。
以此类推。
PS:实际上分析过来就是斐波那契数列。
代码实现:
可以有递归与动态规划两种方法。
------------更新-----------22.12.2019----------
也可以使用迭代。
x = 1;
y = 1;
for(.......){
x = x + y;
y = x + y;
}
递归:
设n阶时走法数为f(n),则f(n) = f(n-1) + f(n-2)
伪代码:
int f(int n){
if(1 == n) return 1;
if(2 == n) return 2;
return f(n - 1) + f(n - 2);
}
动态规划:
设n阶时走法为seq[n - 1],则seq[0] = 1;seq[1] = 2;
seq[n] = seq[n - 1] + seq[n - 2];
*/
#include <stdio.h>
#include <stdlib.h>
/* 动态规划实现 */
int dpSeq(in