题目:现有n级台阶,每走一步可以选择一步跨一级台阶,也可以一步跨两级台阶,求有多少种走法?(假设n=10)
- 了解递归
递归的定义:有一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归。用递归过程定义的函数。
先打个比方,有个故事:从前有座山,山里有座庙,庙里有个老和尚在讲故事,讲的是从前有座山,山里有座庙,庙里有个老和尚在讲故事,讲的是………
这个故事可以比较形象地描述出递归函数的一个特点——在函数定义中又提到了这个函数。
例如:
可以发现以上 在函数A的定义中,在337行中又提到了函数A。所以该函数是一个递归函数。
- 递归函数的必要条件
(1) 存在限制条件,当满足这个限制条件的时候,递归便不再继续。
(2) 每次递归调用之后越来越接近这个限制条件
对于上图的函数A,(1)中限制条件体现在if语句,当n为1时,返回值为0,结束。(2)体现在337行的A(n-1)。
- 再次回到递归函数的定义:一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归。
发现:这与数学中的分段函数其实是一样的
- 下面我们来解决n级台阶的问题
逆向思维
假设我们已经走完了n级台阶并且知道了有f(n)种走法,那么再想想,最后一步我们可以是从n-1级台阶跨一级上来的,也可以是从n-2级台阶跨两级上来的。那就分为两种情况,设走n-1级台阶的方法有f(n-1)种,走n-2级台阶有f(n-2)种,那么就有f(n)=f(n-1)+f(n-2)。列出结束条件即可。
正向思维
分析:对于台阶走法
假设只有一个台阶,那么只有一种跳法,那就是一次跳一级,f(1)=1;如果有两个台阶,那么有两种跳法,第一种跳法是一次跳一级,第二种跳法是一次跳两级, 如果有大于2级的n级台阶,那么假如第一次跳一级台阶,剩下还有n-1级台阶,有f(n-1)种跳法,假如第一次条2级台阶,剩下n-2级台阶,有f(n-2)种跳法。
只有1阶时,有F(1) -> 1;
有2阶时,有F(2) -> 2 种走法;
有3阶时,有F(3) = F(1) + F(2) 种走法;
```
N阶时,有F(N) = F(N-1) + F(N-2) 种走法;
可知为以上图中的斐波那契数列。对于代码实现,可以通过递归思想来实现;
调用该函数:
得出结果。