未名湖边的烦恼引起的递归问题探讨
未名湖边的烦恼
问题描述
每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。
每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)
输入格式
两个整数,表示m和n
输出格式
一个整数,表示队伍的排法的方案数。样例输入3 2样例输出5数据规模和约定 m,n∈[0,18]
问题分析这是一种类似汉诺塔问题的题目,首先要保证换鞋的人m 多于借鞋的人n。否则,无论怎么排序,都是会出现无鞋可借的尴尬局面。
所以,首先判断(m>n),否则返回0,表示没有方法来排序。
之后,当还鞋的人数n为0 的时候,这时候无论怎么排序都是一种方法,所以这时候函数返回的是1;
#include "iostream"
using namespace std;
int fun(int m,int n)
{if(m<n){return 0;}else if (n==0){return 1;}else return fun(m-1,n)+fun(m,n-1);
}
int main()
{int m,n;cout<<"输入还鞋人m,借鞋人n"<<endl;cin>>m>>n;cout<<"有"<<fun(m,n)<<"排序方法"<<endl;return 0;
}
这里的return fun(m-1,n)+fun(m,n-1) 前面的fun(m-1,n)意思是还鞋子的一个人站在最前面,之后剩下的哪些人再接着排序,fun(m,n-1) 意思是借鞋子的人站在最后面,剩下的再接着排序。
猴子吃桃问题
问题描述:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?
同样还有一道猴子吃桃问题也可以用递归来解决。
public class Cpeach {public int eat02(int n) {System.out.println("f(" + n + ")进栈");if (n == 1) {System.out.println("到达最大深度!");System.out.println("f(" + n + ")出栈");return 1;} else {int a = eat02(n - 1) * 2 + 2;System.out.println("f(" + n + ")出栈");return a;}}public static void main(String[] args) {int n = 10;Cpeach pea = new Cpeach();int num = pea.eat02(n);System.out.println(num);}
}
在此,特地有了出栈和进栈来清楚的表示对递归对系统栈的影响。
从上面,可以清楚的看到栈对空间复杂度的影响。
1加到100的数学题
其实高斯小时候的从1加到100的数学题也是可以用递归方法来解决的。
public class NumOneToHundred {public int add(int n) {if(n == 1){return 1;}else{return add(n-1) +n;}}public static void main(String[] args) {int n = 100;NumOneToHundred a = new NumOneToHundred();int sum = a.add(n);System.out.println(sum);}
}
爬楼梯问题:
一段楼梯共n级台阶,每次只能走一级或两级,问共有多少种走法?列出n=10时的所有走法。
乍看知道问题感觉还是稍显的有些麻烦,我们这样子来想,假如 n = 7 时,最后一步是会有f(7) = f(5) + f(6)
得在 n = 1和2的时候,我们得到f(1),f(2)为1
所以,我们到下面的公式
说白了,这个其实就是斐波那契数列
public class ClimbStairs {public int stairs(int n) {if (n == 1)return 1;if (n == 2)return 2;else {return stairs(n - 1) + stairs(n - 2);}}public static void main(String[] args) {int n = 7;ClimbStairs cs = new ClimbStairs();int sum = cs.stairs(n);System.out.println(sum);}}
递归问题的时间和空间复杂度都是巨大的,在项目过程中要尽量减少使用。
递归虽好,不要贪杯!
未名湖边的烦恼引起的递归问题探讨相关推荐
- 蓝桥杯 未名湖边的烦恼 引发的递归问题探讨
未名湖边的烦恼 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要 ...
- 算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 递推法 1 问题描述 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰 ...
- java 蓝桥杯算法训练 未名湖边的烦恼
试题 算法训练 未名湖边的烦恼 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一 ...
- 关于未名湖边的烦恼问题
昨天,我很受伤,自尊心严重受损,一切的一切都来源于一道题--未名湖边的烦恼,这是蓝桥杯官网的一道题,我看到后一直没有思路,最后无奈之下,我去百度上找了一篇讲这个题的博客,轻轻松松的就找到了,然而它里面 ...
- 蓝桥杯 未名湖边的烦恼
蓝桥杯 未名湖边的烦恼 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个 ...
- 蓝桥杯-未名湖边的烦恼(java)
算法训练 未名湖边的烦恼 时间限制:1.0s 内存限制:256.0MB问题描述每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩.每天早 ...
- Java实现 蓝桥杯 算法训练 未名湖边的烦恼
算法训练 未名湖边的烦恼 时间限制:1.0s 内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. ...
- 蓝桥杯之未名湖边的烦恼-递归极简版(c++实现)
上文链接:蓝桥杯之Remember the A La Mode-需要谨慎处理逻辑关系(c++实现) 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好 ...
- 未名湖边的烦恼-蓝桥杯算法训练题-递推/递归
问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个.现在 ...
最新文章
- 如何开发一个属于自己的小程序
- python的编程模式-python编程(python开发的三种运行模式)【转】
- PHP的学习--解析URL
- 精通C++之前,你必须知道的几件事!
- JS移动客户端--触屏滑动事件 banner图效果
- Camel中的几个重要概念之 Components
- 深入浅出SQL(2)——select、update…
- Delphi TXLSReadWriteII导出Excel
- php mysql备份类_php MYSQL 数据备份类
- Linux终端常用快捷键总结
- 前后端整合---js对象方法---异步组件
- JavaScript-参数
- 20155213免考项目——简易的HIDAttack
- 极客大学架构师训练营 系统架构 CAP原理 分布式系统脑裂 第六次作业
- SpringMVC中请求的转发和重定向
- sql server 常用工具
- 供应链金融与区块链02——论文阅读
- Ubuntu17.04系统安装必备软件与存在的问题
- UG NX2007调出Drill钻孔命令的方法
- 千兆12光12电管理型工业以太网交换机 12千兆光12千兆电口宽温环网交换机
热门文章
- .NET Core使用Cookie做身份验证
- Linux系统中more和less命令的区别
- 英文字体免费下载:10款最新的高品质字体
- 免费字体下载,在线设计,不怕找不到好字体
- 一不小心做出四皇冠淘宝店,她在小类目里找到大商机 | 菁英汇故事
- 审批流程java 代码_基于jsp的企业流程审批系统-JavaEE实现企业流程审批系统 - java项目源码...
- windows 安装es环境,手把手教学
- 农业信息化让农民“心明眼亮”
- C语言,输出变量的地址
- 超大跨度桥梁建设如何突破特异风致灾风险的困局?