上L层楼梯有几种上法?
某楼梯有L层台阶,上楼梯可以一次迈一层,也可以一次迈两层。那么走完这L层台阶共有几种走法?
用递归的思路分析:
1.如果只有一层楼梯,那么自然只有一种走法。
2.如果有两层楼梯,那么有两种走法。(一种是一次迈一层,另一种是一次把两层全迈上去)
3.如果有L层楼梯,那么,先走一层,剩下的层数的走法数。加上先走两次,剩下的层数的走法数的和。就是L层的总共走法。
于是假设存在某函数f(x),参数x表示层数,返回值是走x层的总共走法数。那么可以知道:
f(1)=1; ①
f(2)=2; ②
f(x)=f(x-1)+f(x-2); ③
综合1,2,3。递归函数就可以写出来了。
C#实现:
用递归的思路分析:
1.如果只有一层楼梯,那么自然只有一种走法。
2.如果有两层楼梯,那么有两种走法。(一种是一次迈一层,另一种是一次把两层全迈上去)
3.如果有L层楼梯,那么,先走一层,剩下的层数的走法数。加上先走两次,剩下的层数的走法数的和。就是L层的总共走法。
于是假设存在某函数f(x),参数x表示层数,返回值是走x层的总共走法数。那么可以知道:
f(1)=1; ①
f(2)=2; ②
f(x)=f(x-1)+f(x-2); ③
综合1,2,3。递归函数就可以写出来了。
C#实现:
static void Main(string[] args)
{
int l=0;
while(true)
{
Console.Write("L=");
string str = Console.ReadLine();
l = int.Parse(str);
if (l == 0) break;
Console.WriteLine(CalcStairs(l));
}
}
static int CalcStairs(int L)
{
if (L == 1)
return 1;
if (L == 2)
return 2;
return CalcStairs(L - 1) + CalcStairs(L - 2);
}
{
int l=0;
while(true)
{
Console.Write("L=");
string str = Console.ReadLine();
l = int.Parse(str);
if (l == 0) break;
Console.WriteLine(CalcStairs(l));
}
}
static int CalcStairs(int L)
{
if (L == 1)
return 1;
if (L == 2)
return 2;
return CalcStairs(L - 1) + CalcStairs(L - 2);
}
张旋(zxsoft)
如对本文有什么疑问,请在下面写下留言,谢谢!