关于python中递归的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于python中递归的问题相关的知识,希望对你有一定的参考价值。
有五个人,第一个人是10岁,第二个人比第一个人大两岁,第三人比第二人大两岁,第四人比第三人大两岁,第五人比第四人大两岁。
def age(x):
if x==1:
return 10
else:
return int(age(x-1))+2
以上是代码,运算结果正常,我想问下,他的过程是不是如下:x为5,那么就是每轮的结果6+5+4+3=18,是不是这样运算的呢?那么当x为2的时候,就变成了只有一个3了啊,怎么的出来12的结果呢?着实想不明白。
另外也特别想请教一下他的解答思路,为啥是用第几个人去减一在加2呢,不是应该用第一个人的年龄去加2么?
一直递归到x==1就可以了
你要知到第n个人的年龄,其实就是第一个人的年龄加上n-1个2对吧,也就是n-1个人的年龄+2,再加上n-2个人的年龄+2,一直加到第一个人的年龄。上面的函数调用,一直没有返回而是一层一层的调用,知道x==1的时候才会返回。每次都会调用堆栈保存局部变量。
如果递归次数过多,系统就会有可能内存不足,不信你增大人数,比如计算100000个人的年龄可能会溢出,此为堆栈溢出,也就是没有堆栈空间了 参考技术B pthon递归中有两个过程,先是你输入X,如X=5,X=5没有初始值,只能通过x=4来获得,因为age(5)=age(4)+2,x=4也没有初始化,继续类推直到x=1,x=1有初始值age(1)=10,所以age(2)可算了,age(2)有值,继续算age(3)直到age(5),有先去底层再返回顶层2个过程本回答被提问者采纳 参考技术C 比如 求第三人年龄 age(3), 则 return age(2) + 2, 也就是说 第三人比第二人大2岁, 而 age(2) 又返回 age(1) +2, 也就是第二人比第一人大2岁, age(1) 则 返回 10岁 :)
python的递归
今天,我们要讲的内容是关于python的递归。
什么是递归?看这个名字,你也许能够猜出个大概。关于递归,我们有一个很经典的应用,就是我们以前高中一些数学题目中的累乘,像n *(n-1)* (n-2) * ... * 1。在这里,如果要让你计算最终的结果,你可能会想到用for循环来实现,但是,我们在这里可以稍微进行优化一下,比如像这个例子一样:
#for循环
def LSF(n):
result = n
for i in range(1,n):
result *= i
return result
#递归
def LSF(n)
if n == 1:
return 1
else:
return n * LSF(n - 1)
我们来看一下上面这两段代码,第一段是用for循环实现的,第二段是用递归实现的。我们看一下这两段代码有什么区别,先来看for循环,简单的定义了一个区间,然后在这个区间内让每一个数逐渐相乘,就得到了我们要的结果了。重点看一下递归这个操作,先是判断n是否为1,如果为1的话,就直接得到结果,因为n=1,我们用接下来的代码的话,最总结果是0,这样的结果并不准确,然后我们排除1的情况,计算接下来 的值,直接运算n *(n-1)。这样的代码效率可能没有for循环高,但是,可读性却好很多。
最后,我们来讲一下什么是二分查找,所谓的二分查找就是一种寻找某个数据的高效手段。比如我们要在0到100内找到81这个数,我们先把0到100对半分,发现81在50到100之间我们再进行一次对半分,发现81在75到100之间,这样一来,我们经过几次对半分,就找到我们要的数81了,这样的效率要比我们从一数到一百要高得多,具体如何用代码实现,我们明天再讲。
好的,今天的内容就讲到这里啦~
(文章图片若有侵权,请联系作者删除)
以上是关于关于python中递归的问题的主要内容,如果未能解决你的问题,请参考以下文章