关于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么?

参考技术A 这个是递归函数,递归函数必须有收敛条件,收敛条件是x==1
一直递归到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中递归的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于python递归函数怎样理解

3.关于python函数,以及作用域,递归等知识点

用python递归实现组合,以及关于递归的个人感想

python 关于函数递归调用自己

python关于八皇后判断冲突函数的一些逻辑小问题

关于旅行家TSP问题的几种算法 python