# 李白打酒(递归方法)

题目:话说大诗人李白,一生好饮。幸好他从不开车。

一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:

无事街上走,提壶去打酒。

逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。

请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。

-**分析:题目中有十次花,五次店,因为最后一次之后酒为0,故最后一次应该遇到花。运用递归的思想,每次都具备两种可能性,遇花或者遇店。故递归代码如下**

**使用递归的方法,对整个题目比较容易理解。**

## 程序代码

```c

#include int path[100];

int ans;

void libai(int step,int flowers,int wine,int store)

{

if(step==15)

{

path[step]=1;

flowers++;

wine--;//最后一次肯定遇花

if(wine==0&&flowers==10&&store==5)

{

for(int i=1;i<=step;i++)

printf("%c",(path[i]==1)?'b':'a');

printf("\n");

ans++;

}

return;//返回上一级

}

//遇到花

if(store<=5&&flowers<9&&wine>=1)//因为最后一次要遇到花所以要确保之前遇花不能超过9次

{

path[step]=1;

libai(step+1,flowers+1,wine-1,store);

}

//遇到店

if(store<5&&flowers<=9)

{

path[step]=0;

libai(step+1,flowers,wine*2,store+1);

}

}

int main()

{

ans=0;

libai(1,0,2,0);

printf("%d",ans);

return 0;

}

```

最后一次肯定遇花,wine==0&&flowers==10&&store==5来判断是否有存在遇5次店;因为最后一次要遇到花所以要确保之前遇花不能超过9次,所以使用store<=5&&flowers<9&&wine>=1来判断是否遇到少于5次店和10次花,用两个情况来进行递归计算。

0.0分

2 人评分

李白打酒递归java_李白打酒----递归理解相关推荐

  1. 二叉树 递归 java_递归实现二叉树 JAVA

    今天顶着要交年终文档的压力,总算理清了递归方式实现二叉树的方法,彻底弄明白要如何建一颗二叉树了!终于了切了一桩心愿!苦苦思索近两个星期了,郁闷得快不行了.终于一见庐山真面目,真是凡事一定要坚持到底呀! ...

  2. 递归Java_递归的Java实现

    递归是一种应用非常广泛的算法(或者编程技巧).递归求解问题的分解过程,去的过程叫"递",回来的过程叫"归". 递归需要满足的三个条件:1. 一个问题的解可以分解 ...

  3. 牛客网递归错题:递归、欧几里得求最大公约数的时间复杂度、线性递归与尾递归实例区别

    很久找不到学习的平衡点,似乎有目的性的去解决问题寻求方法获得知识会比直接吸取知识要有趣,更印象深刻,这些都是我爬过的坑,以此铭记在心. 1. 队列在程序调用时必不可少,因此递归离不开队列.× 递归是栈 ...

  4. 递归转化成非递归过程_8086微处理器中的递归和重入过程

    递归转化成非递归过程 As we all know that a procedure is a set of instruction written separately which can be u ...

  5. 排序算法:快速排序算法实现及分析(递归形式和非递归形式)

    快速排序算法介绍 从名字上就可以看出快速排序算法很嚣张,直接以快速命名.确实快速排序 的确很快速,被列为20世纪十大算法之一.程序员难道不应该掌握么.快速排序(Quick Sort)的基本思想是:通过 ...

  6. 哥德尔递归汉译和原始递归——哥德尔原著英译拆解汉译之七

    **哥德尔递归汉译和原始递归--哥德尔原著英译拆解汉译之七 ** 虎年的春节接近尾声,从惠州双月湾返回广州,已经时过一月了.近日又碰上一个震撼世界的俄乌开战,这篇博文也就一拖再拖.此外,还伴有诸多生存 ...

  7. C# 递归的应用 TreeView递归绑定数据

    递归在WinForm中的应用 最近做项目经常用到递归,刚开始很久没用,不太熟悉,现在研究了下,并写下了学习笔记及开发经验总结. 递归热身 一个算法调用自己来完成它的部分工作,在解决某些问题时,一个算法 ...

  8. fibonacci斐波那契数列详解 递归求Fn非递归求Fn求n最近的斐波那契数

    斐波那契fibonacci 斐波那契额数列即前两项F(0)和F(1)都是1,之后的每一项都是前两项相加和即F(3)=2,F(4)=3,F(5)=5; 通项公式:F(n+2)=F(n+1)+F(n). ...

  9. 二叉树中序遍历(递归法和迭代法(非递归法))——C++

    声明:本文原题主要来自力扣,记录此博客主要是为自己学习总结,不做任何商业等活动! 二叉树的遍历有前序遍历.中序遍历.后序遍历和层次遍历,其中二叉树基本知识点可以参考博主上篇博客(二叉树基本知识点图文介 ...

  10. 87-Java方法递归形式、算法流程总结、递归常见案例、递归经典案例-猴子吃桃问题、非规律化递归案例-文件搜索、啤酒问题

    方法递归 一.递归的形式和特点 1.什么是方法递归? 方法直接调用自己或者间接调用自己的形式称为方法递归(recursion). 递归作为一种算法在程序设计语言中广泛应用. 2.递归的形式 直接递归: ...

最新文章

  1. (转)Symbian启动J2ME程序
  2. 数据中心加速,一文说清FPGA与GPU、ASIC目前的竞争格局
  3. 14.PTD与的基址
  4. oracle中NUMBER(10,2)含义
  5. NSTimer(2)
  6. 条码软件如何设置十六进制并跳号打印
  7. Spring Boot 项目启动的七种方式
  8. 利用matlab导入数据+命令行 快速选取excel部分内容
  9. 开发一个app需要多少钱?
  10. 视频怎么分割片段?快速分割视频小技巧
  11. fedora20 安装nvidia独立显卡驱动
  12. 斩获微软offer后,我总结出这10个面试必备技巧(五星干货)
  13. 库存出入库管理业务流程图怎么做?
  14. 耦合(六种)与 内聚(七种)—《软件工程与计算》笔记
  15. driver nvidia web_nvidiawebdriver驱动
  16. SEC起诉瑞波,中本聪早有论断
  17. axios拦截器(请求拦截和响应拦截)
  18. 大学期末不挂科速成课-史上最全
  19. leetcode题目
  20. linux shell返回值方式及示例

热门文章

  1. 基于Matlab的IMM雷达多目标跟踪
  2. TableauとSFDCデータ整理
  3. Java JDK8/JAVA8以及后版本收费后还能用吗
  4. 西门子PLC如何使Q区输出点在CPU停止后能够常ON或常OFF或实现断电保持?
  5. Flex ikev2
  6. android如何设置自适应大小的背景图片,如何调整背景图片大小以适应Android中的应用程序屏幕大小...
  7. 【CSS】CSS画矩形、圆、半圆、弧形、半圆、小三角、疑问框
  8. JAVA SE 基础汇总
  9. 第3-4课:爱因斯坦的思考题(上)
  10. 使用小波包变换分析信号的matlab程序,使用小波包变换分析信号的MATLAB程序