近日一道猴子吃桃子的编程题:

猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?

他需要打印每天吃完后剩下的桃子数,并要求不在主函数中打印

显然,在主函数里加个for循环就结束了,但在递归函数里也是用for循环吗?

我们来考虑一下:

递归函数的基线条件应该是第10天为1,一般条件应该是

ok,我们考虑一下for循环打印语句:

#include <stdio.h>
//函数功能: 用递归法计算桃子个数
/* 入口参数:n表示第几天
返回值:桃子个数*/
int Peach(int n)
{int m,i;if (n==10)return 1;else{m=(Peach(n+1)+1)*2;   //计算公式for (i=10;i>=1;i--){printf("第%d天还剩%d桃子\n",i,m);//打印语句}return  m;}
}
int main (void)
{int x;x=Peach(1);printf("第一天有%d桃子\n",x);return 0;
}

运行结果:

寄了。。。

运行结果解释:

注意到这样的话,比如说你想算Peach(8),他先算m,而m中包含Peach(9),于是让n=9,再来一遍Peach()函数,(注意,这时Peach(8)中的for循环还没开始打印!!!)

这时他算n=9的m,要用Peach(10)=1,成功算出了m,然后打印了for循环,注意这时m=Peach(9),然后开始从i=10打印到i=1的Peach(9)个桃子。接着把m返回给Peach(8)里面的Peach(9),算出Peach(8)里的m,再打印一遍Peach(8)个桃子,因此是这样的运行结果。

注意到变量的作用域问题,每次函数里的m都是开辟了一块新的内存,所以每次函数运行的m,都不是一个m。

所以我们发现,递归函数每次打印在再次调用自身时,自动类似于给自己加了一个for循环

看如下正确代码:

#include <stdio.h>
//函数功能: 用递归法计算桃子个数
/* 入口参数:n表示第几天
返回值:桃子个数*/
int Peach(int n)
{int m;if (n==10)return 1;else{m=(Peach(n+1)+1)*2;   //计算公式printf("第%d天还剩%d桃子\n",n,m);//打印语句return  m;}
}
int main (void)
{int x;x=Peach(1);printf("第一天有%d桃子\n",x);return 0;
}

运行结果:

这样就成功了。

关于c语言递归函数中打印语句(猴子吃桃子问题)相关推荐

  1. c语言break语句作用,解析c语言switch中break语句的具体作用

    解析c语言switch中break语句的具体作用 问题:break在for循环.while循环等循环流程控制中起的作用是停止执行break后面的语句,跳出本次循环,并跳出该循环控制体: 在switch ...

  2. c语言break语句作用范围,C语言程序设计中break语句分析

    摘 要: 在C语言程序设计课程中,break语句有两个作用:一是应用于switch语句中,可以结束多分支选择结构:二是应用于循环结构中,可以结束本层循环.通过实例分析出break语句使用的条件,bre ...

  3. 猴子吃桃问题c语言链表,数据结构课程设计--猴子吃桃子问题.doc

    Data organization curriculm project 数据结构课程设计 设计题目: 猴子吃桃子问题 专业班级: 通信工程0804班 学生学号: 0909082421 学生姓名: 王 ...

  4. c语言程序设计中常用语句,单片机C语言编程常用语句

    <单片机C语言编程常用语句>由会员分享,可在线阅读,更多相关<单片机C语言编程常用语句(22页珍藏版)>请在人人文库网上搜索. 1.C51程式设计一般陈述式摘要,1,C51 S ...

  5. C语言switch中break的作用,C语言switch中break语句的作用

    问题: break在for循环.while循环等循环流程控制中起的作用是停止执行break后面的语句,跳出本次循环,并跳出该循环控制体: 在switch条件选择中,没有了循环控制,break又起什么作 ...

  6. c语言的中打印出鸟图形,教你画出一只萌萌哒小鸟【PS教程】

    小编:今天为大家奉上@junhong的教程--使用PS教你画出一只萌萌哒小鸟,看到效果图是不是已经被它萌翻了.大家不要被它吓住认为实现太困难,跟着作者的步骤一部分一部分的来实现,最后就会合成一只完整的 ...

  7. C语言学习-10-递归函数-猴子吃桃子

    一.题目 猴子第一天摘了很多桃子,吃了一半,之后又多吃了一个.第二天吃了一半,又多吃了一个.一直到第十天,还剩下一个桃子,问第一天一共有多少个桃子. 二.个人理解 递归函数一定需要用到if判断,所以第 ...

  8. C语言递归函数实现十位数转换进制并打印出来(超详细)

    C语言递归函数实现十位数转换进制并打印出来 思路 事例 代码 思路   取余倒排序   将数字每次除以进制数的余数打印,但这样不是倒排序,通过将打印操作写在调用递归函数下面,可以在每次调用递归函数时将 ...

  9. C语言中循环语句(while)

    循环语句 (i)while (ii)for (iii)do while 循环语句三要素: 1.循环变量的初始化; 2.循环条件; 3.循环变量的更新语句 首先来看while循环,前面我们已经掌握了if ...

最新文章

  1. Web性能优化实践——应用层性能优化
  2. Forth Week :快速上手一门编程语言
  3. PostgreSQL 9.6.0 手册
  4. ASP.NET生成WORD文档服务器部署注意事项
  5. 分布式任务队列:Celery使用记录
  6. python编写函数模拟猜数游戏、系统随机产生一个数_C语言编程:编写一个猜数的游戏,系统自动产生一个随机数,你来猜,程序给出提示,直到猜对为止。...
  7. (尚硅谷)JavaWeb新版教程08-QQZone项目的实现
  8. linux用tar打包文件,linux tar打包、解包命令
  9. VB.NET模拟掷骰子
  10. 基于纠错编码的数字水印matlab,method robustness是什么意思
  11. 从《长安十二时辰》看企业中台战略
  12. 搭建内网ntp时间同步服务器
  13. AMBA之AHB总线
  14. TCP 协议如何保证可靠传输?
  15. nubia Z5 mini 小牛 黑砖qhsusb dload修复
  16. 独立IP、PV、UV、DAU含义
  17. 《金蝶ERP-K/3完全使用详解》——6.3 系 统 设 置
  18. RK3399 点亮mipi屏和EDP屏
  19. Matlab更改Figure图窗的背景色|底色|网格色|黑色白色蓝色红色任意RGB色|重置颜色
  20. 德国十大电商都有谁?

热门文章

  1. 计算机一级模拟7试题,计算机一级模拟试题7.doc
  2. cad2016中选择全图字体怎么操作_没有下载安装CAD软件怎么打印CAD图纸?快看这里...
  3. Android 图片预览功能
  4. js下载文件、音频、视频的方式
  5. 航测大数据量处理_【应用案例】徕卡HxMap软件并行处理环境 在大数据量、高效率处理要求下的应用...
  6. 临期经济诞生了好特卖,临期食品正在“入侵”消费时代
  7. 三菱je-a系列伺服支持modbusrtu 协议吗_作为工控电气人,你知道我们必备的软件有哪些吗?...
  8. liftover 转换不同版本的GRCh
  9. 【源码分享】图片API系统源码 V1.1
  10. 网络管理员入门与基础技术