【递归】青蛙跳台阶的变式题你还会吗?

简介: 【递归】青蛙跳台阶的变式题你还会吗?

问题1:


如果青蛙一次只能跳一级或两级台阶,问跳到第N级台阶总共有多少方法?


解题:


跳上一级台阶,青蛙共有一种方法;0-->1,总共一种方法。


跳上两级台阶,青蛙可以一级一级跳,跳两次0-->1-->2,也可以直接跳到二级台阶,跳一次,0--->2;总共2种方法。


跳上三级台阶,青蛙可以青蛙可以一级一级跳,跳两次,0-->1-->2-->3,也可以先跳一级,然后再跳三级台阶,跳两次,0-->1--->3;也可以先跳两级,再跳一级台阶,跳两次,0-->2-->3;总共三种方法。


对于跳上三级台阶我们还可以从他跳上第三级台阶的最后一步来考虑(因为最后一步不一样,所以方法肯定不会重复),就是跳上三级台阶的方法数=跳上倒数第一级台阶的方法数+跳上倒数第二级台阶的方法数,这


那么我们便找到了普遍规律:


跳上N级台阶,得到递推公式f(n)=f(n-1)+f(n-2)


递推出口就是f(1)=1&&f(2)==2


这和斐波那契数列的结论很像,但是思考的过程却大相径庭!


代码:

#include<stdio.h>
int fabo(int n)
{
  if (n == 1) return 1;
  if (n == 2) return 2;
  if (n > 2) return fabo(n - 1) +fabo(n-2);
}
int main()
{
  int n = 0;
  scanf("%d", &n);
  int ret=fabo(n);
  printf("%d", ret);
}

结果:

image.png

看到这里我相信会了青蛙一次跳一级,两级台阶,但是稍微变一下,如果是青蛙可以一次跳一级,两级,三级台阶的问题,你是不是还会呐?


问题2:


如果青蛙一次可以跳1级,或2级,......或N级台阶,问青蛙要想跳到第N级台阶总共有多少种方法?


解题:


同样从他跳上第三级台阶的最后一步来考虑(因为最后一步不一样,所以方法肯定不会重复)


最后一步青蛙可以从倒数第一级,倒数第二......第二级,第一级台阶跳上去


因此得到公式f(n)=f(n-1)+f(n-2)+f(n-3)+....+f(2)+f(1);


同时f(n-1)=f(n-2)+f(n-3)+.....+f(2)+f(1);


得到递推公式f(n)=2*f(n-1);


代码:

#include<stdio.h>
int fabo(int n)
{
  if (n == 1) return 1;
  if (n >= 2) return fabo(n - 1) * 2;
}
int main()
{
  int n = 0;
  scanf("%d", &n);
  int ret=fabo(n);
  printf("%d", ret);
}

结果:


bb3c5051994b40b4a672633192e237bc.png

问题3:


如果青蛙一次可以跳1级,或2级......或M级台阶,问青蛙要想跳到第N级台阶总共有多少种方法?(青蛙不能回跳)


解题:(分情况讨论)


1.当M>=N,因为青蛙不能回跳,所以此时问题等同于问题2;


2.当M<N,f(n)=f(n-1)+f(n-2)+f(n-3)+....+f(n-m)


同时f(n-1)=f(n-2)+f(n-3)+....+f(n-m)+f(n-m-1);


变换一下就是f(n-1)-f(n-m-1)=f(n-2)+f(n-3)+....+f(n-m)


因此得到递推公式:f(n)=2*f(n-1)-f(n-m-1)


代码同理可以写出来,自己动手试试吧!


目录
相关文章
|
1月前
|
Java Python
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
36 0
|
11月前
|
机器学习/深度学习
青蛙跳台阶(递归)
青蛙跳台阶(递归)
72 0
递归问题的实际运用:汉诺塔问题
递归问题的实际运用:汉诺塔问题
84 0
递归问题的实际运用:汉诺塔问题
汉诺塔?爬楼梯?斐波那契?知道递归就够了
汉诺塔?爬楼梯?斐波那契?知道递归就够了
71 0
|
机器学习/深度学习 算法 C语言
函数递归+青蛙跳台阶——“C”
函数递归+青蛙跳台阶——“C”
你是真的“C”——函数递归详解青蛙跳台阶
手把手教学——函数递归详解汉诺塔+青蛙跳台阶问题
88 0
你是真的“C”——函数递归详解青蛙跳台阶
|
C语言
【C】青蛙跳台阶和汉诺塔问题(递归)
【C】青蛙跳台阶和汉诺塔问题(递归)
100 0
【C】青蛙跳台阶和汉诺塔问题(递归)
|
算法 Java
【递归与回溯算法】汉诺塔与八皇后问题详解
文章目录 1 汉诺塔问题 1.1 汉诺塔问题概述 1.2 思路分析 1.3 代码实现(Java) 1.4 结果验证 2 八皇后问题 2.1 八皇后问题概述 2.2 思路分析 2.2.1 问题划分与分析 2.2.2 涉及到的数据结构分析 2.2.3 上下对角线与行列的关系 2.3 代码实现(Java) 2.4 结果验证
【递归与回溯算法】汉诺塔与八皇后问题详解