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

第1个回答  2010-08-03
这个是递归函数,递归函数必须有收敛条件,收敛条件是x==1
一直递归到x==1就可以了
你要知到第n个人的年龄,其实就是第一个人的年龄加上n-1个2对吧,也就是n-1个人的年龄+2,再加上n-2个人的年龄+2,一直加到第一个人的年龄。上面的函数调用,一直没有返回而是一层一层的调用,知道x==1的时候才会返回。每次都会调用堆栈保存局部变量。
如果递归次数过多,系统就会有可能内存不足,不信你增大人数,比如计算100000个人的年龄可能会溢出,此为堆栈溢出,也就是没有堆栈空间了
第2个回答  推荐于2016-10-12
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个过程本回答被提问者采纳
第3个回答  2010-08-02
比如 求第三人年龄 age(3), 则 return age(2) + 2, 也就是说 第三人比第二人大2岁, 而 age(2) 又返回 age(1) +2, 也就是第二人比第一人大2岁, age(1) 则 返回 10岁 :)
相似回答