初学者c++刷题——了解递归并使用递归函数解决n级台阶问题

题目:现有n级台阶,每走一步可以选择一步跨一级台阶,也可以一步跨两级台阶,求有多少种走法?(假设n=10)

  • 了解递归

递归的定义:有一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归。用递归过程定义的函数。

先打个比方,有个故事:从前有座山,山里有座庙,庙里有个老和尚在讲故事,讲的是从前有座山,山里有座庙,庙里有个老和尚在讲故事,讲的是………

这个故事可以比较形象地描述出递归函数的一个特点——在函数定义中又提到了这个函数。

例如:

03481aebe62f49aabd91c9c561ab2de1.png

 可以发现以上 在函数A的定义中,在337行中又提到了函数A。所以该函数是一个递归函数。

  • 递归函数的必要条件

(1) 存在限制条件,当满足这个限制条件的时候,递归便不再继续。

(2) 每次递归调用之后越来越接近这个限制条件

对于上图的函数A,(1)中限制条件体现在if语句,当n为1时,返回值为0,结束。(2)体现在337行的A(n-1)。

  • 再次回到递归函数的定义:一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归。

发现:这与数学中的分段函数其实是一样的e3c2dee82d7845c1808a4834e256ffd3.png

 fabf67f7359c4680a5fe75bdd56de11d.png

  •  下面我们来解决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) 种走法;

 

可知为以上图中的斐波那契数列。对于代码实现,可以通过递归思想来实现;

45914359d8744e2faf0917423fc5acf4.png

 调用该函数:b01141319e3d40b09be4946bb09d7e97.png

 

得出结果。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值