跳台阶

今天把跳台阶的题整理一下:

一.传统的题是给定n个台阶,每次可以跳一个台阶或两个台阶,问有多少种跳法?

此题可以使用递归的方法解决:

①.一个台阶时,那么就一种跳法。

②.两个台阶时,便有两种跳法,第一种是:第一次跳一个,跳两次就跳完;第二种就是一次跳两个,直接跳完!

③.三个台阶时,便有三种跳法,第一种是:每次都跳一个;第二种是:第一次跳一个,第二个跳两个;第三种是:第一次跳两个,第二次跳一个!

......一次类推,给定n层台阶,设定跳法数函数为f(n),所以f(n) = f(n-1)+f(n-2)即为此题解!

C语言实现:

1 int floor(int n){
2     if(n<3)
3         return n;
4     else
5         return floor(n-1)+floor(n-2);
6 }

二.升级型的跳台阶就是原来可以跳一个或两个,现在变为可以跳一个,二个,三个...n个,这个问题我们也可以递推的方法来做!但是在此之前我们先定义f(0) = 1。一会你就知道这样的好处了!

首先,n等于1和2时和传统跳台阶一样.

当n等于3时,f(3) = f(3-1) + f(3-2) + 1

当n等于4时,f(4) = f(4-3) + f(4-2) + f(4-1) + 1

  ......

当n等于n时,f(n) = f(n-1) + f(n-1) + ... + f(0)  ①

当n等于n-1时,f(n-1) = f(n-2) + f(n-3) + ... + f(0)   ②

①-②得:f(n) = 2*f(n-1)     n>=3

 int floor(int n){
     if(n<3)
         return n;
     else
         return 2*floor(n-1);
 }

 

 

 

 

 

posted @ 2018-03-25 18:19  Dragon.Yu  阅读(522)  评论(0编辑  收藏  举报