跳台阶
今天把跳台阶的题整理一下:
一.传统的题是给定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); }