题目1:39级台阶
小明刚刚看完电影《第39级台阶》。离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我 每一步只能迈上1个或2个台阶。 先迈左脚,然后左右交替, 最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
菜鸟分析:
第一级台阶:左脚 可能为1 (一步2个) 右脚 可能为0
第二级台阶:左脚 可能为1(一步2个) 右脚 可能为1(一步1个)
..........
第39级台阶: 最后一步是迈右脚
1.(38左)(一步1个) 2.(37左)(一步2个)
可以写两个函数左右脚函数,每个函数都有三种情况:
第一级台阶
第二级台阶
大于等于三级台阶 (与前一步有关,分两种情况一步一个台阶,一步两个台阶,而且还和这一级台阶是左右脚有关。所以直接从第39级台阶往回分析,也就是递归,因为第39级台阶必为右脚)
c++代码
小明刚刚看完电影《第39级台阶》。离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我 每一步只能迈上1个或2个台阶。 先迈左脚,然后左右交替, 最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
菜鸟分析:
第一级台阶:左脚 可能为1 (一步2个) 右脚 可能为0
第二级台阶:左脚 可能为1(一步2个) 右脚 可能为1(一步1个)
..........
第39级台阶: 最后一步是迈右脚
1.(38左)(一步1个) 2.(37左)(一步2个)
可以写两个函数左右脚函数,每个函数都有三种情况:
第一级台阶
第二级台阶
大于等于三级台阶 (与前一步有关,分两种情况一步一个台阶,一步两个台阶,而且还和这一级台阶是左右脚有关。所以直接从第39级台阶往回分析,也就是递归,因为第39级台阶必为右脚)
c++代码
#include<iostream>
using namespace std;
int left(int n);
int right(int n);
//此步为左脚
int left(int n)
{
if(n==1) return 1;
if(n==2) return 1;
else return(right(n-1)+right(n-2));//两种情况 上一步必为右脚
}
//此步为右脚
int right(int n)
{
if(n==1) return 0;
if(n==2) return 1;
else return(left(n-1)+left(n-2));// 两种情况 上一步必为左脚
}
int main()
{
cout<<right(39)<<endl;
return 0;
}
java代码
public class 第39级台阶 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(right(39));
}
//此步为左脚
public static int left(int n)
{
if(n==1) return 1;
if(n==2) return 1;
else return(right(n-1)+right(n-2));//上一步必为右脚
}
//此步为右脚
public static int right(int n)
{
if(n==1) return 0;
if(n==2) return 1;
else return(left(n-1)+left(n-2));上一步必为左脚
}
}
同学的代码
![](https://i-blog.csdnimg.cn/blog_migrate/b861b053c046666486885eb0a852293e.png)