00:00
各位同学大家好,我们来接着讲一下猴子吃桃子的问题,这道题呢,相对来说比前面两个题呢要稍微麻烦一点,但是呢也不是很难,我们先看一下这个题的要求,他说啊,有一堆桃子。猴子第一天吃掉了其中的一半,并再多吃一个,以后猴子每天都吃其中的一半,然后再多吃一个。到第十天的时候,再想吃的时候还没有吃啊,这个时候还没有吃,就到第十天的时候呢,他想吃,他发现只有一个桃子了。问,最初共有多少桃子?也就是说,说白了就是求第一天。有多少好桃子,第一天还没有吃的时候有有多少桃子好,那么我们先把这个题拿过来,我们做一个分析,还是老规矩啊,做分析。这是我们的练习题三。练习题三。好吧,那这个时候呢,我们还是老规矩做一个分析。
01:02
然后我们再走代码。来,同学们一起动脑筋啊,不要说老师一个人动脑筋,那现在呢,我来做一个分析。思路分析。同学们动脑筋,你们想想应该怎么做。嗯,通过他这个题的要求,我们发现他这有一句话说到第十天时再想吃,再想吃的时候只有一个桃子了,那我们得出一个结论就是什么呢?我们得出的结论是,第十天。第十天。只有一个桃子了。对不对,他只有一个桃子。是这意思吧?那问题来了,他第九天有多少个桃子呢?第九天有多少个桃子呢?他是反过来推的,所以他意思就是说,我现在不知道第一天有多少个,但是呢,我我知道最后最后这一天,也就是说第十天有一个桃子。
02:03
那反过来我们问大家,第九天,你们认为第九天有几个桃子?这个大家能推出来吗?是不是第九天,它其实是,它应该是等于第十天的桃子,注意听他是不是第十天。第十天的桃子数量。加上一个一括起来再乘以一个二啊。哎,是不是这样子啊,同学们想一想,就是说第九天实际上是第十天的桃子。的数量加一再乘以二。为什么这么讲呢?你想,如果第九天有这么多个桃子。那相当于说。第九天他吃的时候,他先吃掉一半。大家想一想,如果第九天有这么一个数,那第十第九天他怎么吃呢?他先吃掉一半,不是这个就没有了吗?然后再吃掉一个。
03:01
不就变成第十天桃子了吗?是不是是不是这样推过来的呀,所以说这个已经分析出来了,那也就是说要求前一天的桃子,其实就是就是就是要求前前一天陶植其实就是他。要求哪天桃子,实际上是他下一天桃子的数量加一乘以二,大家推出来了吗?规律已经找到了。规律是这样子的。就是。第N天的桃子,注意听这句话,第N天。第N天的桃子数量。数量,那我假设这样用一个peach。Peach这个PE是一个桃,Peach是桃子的意思啊,那就可以让这个第天桃子,它应该等于多少呢?它是不是应该等于它的。它的下一天的桃子数量乘以。加上一个耶。是不是加上一个一。这写错了啊。
04:02
加上一个一,再乘以一个二就可以了。是这意思吧,因为他是倒着推的,原先是从第一天往后面推,现在是从最后一天往前面推,所以他应该是N加一。因为他是他是从最后一天往前推嘛,好这个规律找到过后呢,下面我们就可以走代码了。是不是现在可以走代码了,同学们?代码来走一把。好这个呢,因为呃,这个。我们还是在这重建一个文件吧,好不好?重建一个文件夹,Exercise。EER。EX1C exercise03。到这里面呢,我们新建一个文件面点构。好的,然后呢,主体的这个结构这一部分。都用到用得上的,我们写过了。Function主函数。对不对?好,我们把要求先拿过来,刚才这个题的要求,猴子吃桃子的要求呢,已经有了。
05:09
已经有了。我们把它整理一下。对不对,我们把它整理一下。然后呢,这边有我们的分析。思路的分析。思路分析是这个样格的同学们。刚才老师已经把分析写在了我们的word文档。是不是这个意思?好,既然有了这个分析,那同学们想一想,我们完成还有难度吗?几乎没有难度了,对不对?好,我写一个函数fun beach。然后呢,这边有个n in没问题吧,好,根据刚才的分析,如果N等于十,我们就re,痛一个一。因为第四天只有一个考试了,Else else就return多少呢?PN加一。
06:05
再加一。挂起来。就是括起来啊括起来。这一节乘以个二就可以了,那当然我们这个N的数量是有个要求的,就是这个N呢,它的范围是有是有个范围的啊,它的范围是一到十之间。之间,所以说我们代码如果想写的更完整一点呢,我们可以这样写,同学们看,我可以这样写,就是if。N大于。啊,如果是这样写啊,如果N。嗯,它是大于了十。大于了十,或者N小于了一,就是说它它都不在这个范围,大于十那肯定就11了嘛,小于一,那肯定就是说是零了,如果在这个范围呢,我就直接提示他一句话,就是输入的天数不对。
07:06
输入的天数不对。是吧,然后直接返回了,我就不玩了。否则我才往下面继续走,能理解吗?哎,能理解啊,好,同学们,我们来玩一把,我们来玩一把,我们来输出几个数据print能。我们这样写啊,第一天的,第一天的桃子树。桃子。数量是多少呢?来吧,直接pitch写个一就可以了,那我们运行一把,看看代码能否正常的跑起来,CD点点。啊,CD点点,然后呢,回到上一集目录,我们是第三个go wrong main.go跑起来看第一题有多少个桃子好,代码有问题啊,看哪里啊,同样规矩,是不是还是return别写啊,不好意思,应该有个int好再来。
08:02
诶,为什么还有问题啊。哦,这个地方。这个地方因为是这样子的啊,因为这边有个返回值,而这边又不需要返回值,那就这样子,我如果是输出这个结果不对呢。整个我们就我们就让它自动的退出,就是它这执行完了过后,这一条件也不进来嘛,对吧,不进来他就直接直接就走了就完了,或者我们返回一个默认值等于零也可以,也可以无所谓,因为我们不可能哪一天还有零个桃子是吧,返回一个零表示。返回零,返回零表示不正确。啊,表示没有没有得到数量啊,没有得到正确的数量。正确数量就行了,好,来,再跑一遍,跑起来走代码。我们可以可以看到第一天投资数是1534个。1534个桃子,这个桃子,这个猴子还真挺能吃的,对不对?你想一想,他第一天能吃多少桃子?
09:04
挺吓人的哈,看大家可以看一下,那我们再来测几个不对的数据,比如说我们看第十天,是不是第十天真的是等于一个桃子呢,跑一个。第时间是不是只有一个桃子?啊,这个地方有问题啊,这个肯定要改成第十天了,对不对,第十天,那么我们看看第九天有几个桃子呢。第九天的桃子数就应该是几个桃子,四个桃子,看对不对。第九天的桃子数量是四个,看第九天你想想吃了一半。四个桃子吃一半。还有两个,再吃一个,不就只有一个了吗?对不对,说这个是正确的,假设我这个数量不对,比如说我输了一个11天。看看他能不能控制住。11天,他直接说出一句话。输入的天数不对,桃子数为零,因为我我返回是要返回一个零嘛,表示没有得到正确数量,好了,那同学们呢,看到啊,我们其实真的要求的就是第一天。
10:05
好,这种数据就出来了,是1534。1534,好同学们,这个就是一个还是用我们的地龟来解决的一个猴子吃桃子的问题,大家看看能不能理解。好,我把这段代码呢给同学们整理到这里来。好的代码整理一下。分析,包括我们的分析思路,我一定给同学们放到笔记中。好,跟上思路。这是第26。第26行对不对?好,我把它拉到这里来。第26行。紧接着呢,我再从这里面写第27行。27行到第34行。没问题吧,同学们。这是我们这一块的内容的讲解,同学们再好好想一想啊,同学们关于递归调用的这些课堂练习,我希望同学们呢,就是说不看老师的笔记也能做出来,达到这样一个效果才是正确的。
11:04
好的,那关于猴子吃桃子用递归来调用的整个分析,包括我们写的代码呢,就给同学们介绍到这里。
我来说两句