00:00
当我们讲完这个递归呢,我这里布置了有三个题,有三个题,那么同学们来做一下,我你们先做第一个题和第二个题,我待会呢做一个评价啊,给大家呃十分钟的时间来写一下。斐波纳气用来完成。斐布拉契和求函数值,好,同学们写一下,十分钟。好,快速写一下啊,看看同学们能不能写出来。嗯嗯,因为时间的关系呢,我就不再去等了,呃,我就我们来一起把这两个题做一下吧,好吧,就是我们来完成这个递归的课堂练习题。啊,那现在呢,我们来看一下这个怎么做好的,那么首先呢,我们新建一个。累。好,零一来一个object。好,我们来一起完成它。
01:00
主案数,那么首先呢,我们这先把这个题的要求拿过来。他说要计算斐波那契数。非波拉技术,那现在现在呢,你要用递归,所以说我先编写一个方法。方法呃,要写写写这么一个,写写这么一个函数啊,写这个函数DF。啊,那么名字呢,我们简简称叫菲波纳。非斐波,那然后他肯定要传入一个N。最后呢,这地方它要返回一个n in,注意听啊,这个地方,这个地方在递归的时候呢,就不能用这个推导式了。待会我还要说这个事儿,那么现在呢,我们先写一个T。先写一个int,那么我们来分析一下这个问题,分析问题是就说他这门非不拉圾是当。给一个N等于一的时候,它返回一,当N等于二的时候也返回一,当N等于三的时候呢,就是前面两个数相加,所以说我们分析出来这个结论是这样子的,当。
02:05
N等于一的时候,结果为一。这是第一个,第二个呢就是当N,当N传入的是一个20,结果呢是也是一好,后面呢,三当N大于。等于大于大于20。大于大于20干什么呢?结果就是什么呢?就是呃,就是前面两个数的和啊就是。就是前面两个数的和好,这样就很清晰了,那代码就可以这样写了,如果N等于一或者N。N等于二,在这种情况下呢,我们就返回一个一,返回一个一。就是不是这样的情况下呢,我们认为它是大于的啊,但是前提我们认为这个N都是呃整数啊,前面你可以加一段代码来判断它是不是一个整数。
03:07
那这方如如果不这个大于二呢,我们就怎么写呢,就是菲波纳。它的N减去一个一,再加上斐波,那N减去一个二。这样就出结果了。啊,这样就出警不需要。因为你我们说了这个最后这一行呢,就是代表它的这个结果,好,我们来运行一下。那么直接输出斐波,那比如说我们输入一个三三的话呢,就应该返回二啊,我们执行一下看对不对。那为了好看呢,我就飞波那的结果。四等于对吧,加上。好,运行一下,我们看这个结果呢,我们发现是没有问题的。等于二正确,好,我再挑一个稍微大一点的数吧,这个。
04:00
123。4567好七,我看七是不是等于13。二斐波那七等于13也是正确的。没问题,好,第一个题我们就评奖完毕,我们再来看第二个题。第二个题。第二个题呢,更加的简单,它说已知有一个函数,当传入一的时候,等于三。现在给了一个公式,FN就等于二乘以FN减一加一号,这个实际上就是套用公式。这个就更加简单了,这是题二。题二就几乎没有什么难度对吧,我就直接套用公式。啊,其二。题二呢,就是简单的套用公式。套用公式即可。A公式即可。公式即可,那么我们来写一下,比如说我有个def f,那么传进来一个N。
05:07
找好写到这里来这地方它会返回一个int。返回的啊,对了,我这儿再多说一句啊,再多说啊,先写到这,先多写到这儿,好in的,那么这个时候呢,因为这个公式都已经给你了,那就没什么可说的了,直接。就这结果就完了。就写完了这个,就这就就是他的要的结果,因为人家已经说了。呃,对,说错了啊,这边还有个判断,如果N。等于一。我们就返回一个三。Else。A,我们就返回这个结果,哎,这才对,刚才那个有问题啊,现在这个就对了,那么我们来写一下。Print,好F,比如说我写个二,那么二应该等于多少?我们算一下啊,二的话,它应该等于二乘以F2减一,那就是二乘以三,就是六,六加上一个一啊,应该这个等于七就对了。
06:10
我们发现这个结果对不对呢。我们运行一下,我们发现这个结果也是。正确的。好,这是第二一个题,那么我们再来做第三一个题。那为什么要多做点题号,就是希望大家对它有一个深刻的认识,第三个题呢,是猴子吃桃子,这个题大家做过吧,应该。猴子次老师,这个题是不是也做过好?我们来一起完成它。那猴子吃桃子呢?它是这样一个题,就是猴子吃桃子是有一堆桃,猴子第一天吃了其中一半。并且再多吃一个,以后每一天猴子都吃其中的一半,再多吃一个,就是每天吃完了吃一半,再再再多吃一个,最后有个结果出来了,当第十天的时候。再想吃。就是第十天还再想吃的时候,发现只有一个桃子问。
07:03
最初有多少个桃子?啊,这个题呢,应该也很简单,那么我们来做一个思路分析。好,这样子,我们把这个放到这来。把这个放到这来啊。哦,我们干脆把这个题呢,也拿过来啊,拿过来我们来分析一下它思路,分析思路,他的思路应该怎么分析呢?第一步。我们知道第十天,比如说这个D。D等于十的时候,桃子有几个呢?哎,D等于十的时候,桃子有一个,那么问题来了,当DD等于九的时候,大家知道桃子有几个吗?A,它的桃子。不,桃子是不是应该有?是是怎么算呀,同学们。是不是你的这个一乘以一个二再加一个一啊。
08:00
这个这个一就是这个一,这个一就是。一加一。什么什,哦对对对对对,就是一。不是吧?232就是一加上多少,再加一个一再乘以二是不是啊,对对对,就是相当于说第九天有四个桃子对吧?哎,这应该是一加一再乘以。一加一。再乘以一个二。那么我们看看清楚这个这个一。这个一就是他第十天还剩还有多少个桃子,是不是,那么这个我们可以是对十的桃子。对,十其中有一个一好,这个是他多吃了一个一好,我们再推,再推D等于八天的时候,它应该桃子有多少个呢?它的桃子就应该是有这么多个,有这么多个,有多少个呢,就应该是对九。
09:08
对,第九天拥有的桃子不知道多少个啊,加一是不是再乘以二?好,那么第九这个桃子根据刚才算是不是有四个呀,是四个吧,四个桃子,那这个就应该等于。十好,这样以此类推,我们就有规律了,规律就已经出来了啊,这个应该是对吧,那么这个规律就出来了,我们把这个代码就可以写了,那么规律,规律就是什么呢?就是前前前要算前一天的就是,呃,它是。他是把后面的这这一天是算出来,再加一乘以二,所以这个逻辑呢,就应该这样写的D。好,你给我算传进去一个天。你传进去的天。就是你是要求第几天的桃子,然后呢,我这里返回一个整数。
10:04
好,返回一个人数,那么我就要做判断了,如果说你传进来这个D呢,等于十,好,这个简单就是。一个桃子,那else else,如果不是的话呢,我们就提取。干什么呢?是他的恩。啊,对对,怎么样。减还是加?如果你是,你比如传递来这个一是不是要加呀,加加就是往后面走嘛,加再乘以一个二。括起来。好括起来,因为你是往前面往后面去计算,就是你是反着推的。啊,这个括起来。诶,这个这个地方对。哦不不不不不这样,这写错了啊,应该是这个第一天是加上一个一再乘以一个二是这样写的吧。
11:03
啊,这样写就对了,你看吧,就是比如我打个比方吧,比如说假设我们要算第九天的,你看逻辑对不对,第九天,那第九天的话呢,你这个day不等于十嘛,那就是什么呢?就九加十,诶就是我们是第十天的,再加上一个一乘以二嘛,哎,这样就。不就把第九天的算出来了吗?啊这样以此类推啊,那么他这个逻辑呢,就是它是从后面这一天往前面推,我们原先这个呢,是从前面往后面推,区别就在这一点。大家看这个代码能不能看懂,好,来我们运行一下。我们要算的是第一天有多少个桃子。那peach写上一个一。这个应该是15000 1500多个吧,1534好像是。我们执行一下看对不对。啊,桃子的个数是。桃子个数。等于好,第一天有这么桃子,看对不对啊,我这个可能有点记不清楚了,跑一下。
12:04
好,是1534个桃子。但是我们感觉到很奇怪,这个猴子第一天能吃700多个桃子是吧?这不能把它撑死了啊,但是不管怎么样,这个结果呢,就是1534,好,这是我们递归的又一个题,好,我把这个题呢给大家板述到这里,就是递归的三个练习题。啊,我们用SC使用SC实现递二递归的递归的应用案例,好应用案例呢,我给大家整理到这里,咱们一共讲了三个题啊,三个题呢,我就直接这样子啊,咱们不是把所有的题都放在这一起了吗。对吧,三个题大家把它放过来就可以了。好,这是刚才把铁粘过来啊。第一题和第二题放到这里。这是我们的第一个题。诶。
13:00
第二个题。第二个题。这是第二个题,第三个题,第三个题呢,是猴子吃桃子,我们用呃这个。呃,递归把它给解决了,好,又把它放在这里。OK,好,那么下面的代码呢,就是代码源代码啊,代码实现,你写代码实现。好,再把实线给同学们板书到这里来。复制一下。然后放到我们的代码中去。好,这是我们的递归练习题。
我来说两句