
正文
递归函数python特征 python递归特点
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
递归有什么特点?
递归函数的特点:函数定义中直接或间接地调用了本函数,必定存在可使递归调用终止的条件,否则导致出现无限递归。
函数定义中所具有的这些特点是判断函数是否为递归函数的基本要素。
绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。
扩展资料:
数据类型可以通过递归来进行定义,比如一个简单的递归定义为自然数的定义:“一个自然数或等于0,或等于另一个自然数加上1”。Haskell中可以定义链表为:
data ListOfStrings = EmptyList | Cons String ListOfStrings
这一定义相当于宣告“一个链表或是空串列,或是一个链表之前加上一个字符串”。可以看出所有链表都可以通过这一递归定义来达到。
参考资料来源:百度百科——递归算法
相关问答
Q1: 如何理解python中的递归函数
递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。
绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。
计算机科学家尼克劳斯·维尔特如此描述递归:
递归的强大之处在于它允许用户用有限的语句描述无限的对象。因此,在计算机科学中,递归可以被用来描述无限步的运算,尽管描述运算的程序是有限的。
python 2 递归函数和其它语言,基本没有差别,只是不支持尾递归。无限递归最大值为固定的,但可以修改。
作者:黄哥
Q2: python 递归限制
python不能无限的递归调用下去。并且当输入的值太大,递归次数太多时,python 都会报错
首先说结论,python解释器这么会限制递归次数,这么做为了避免"无限"调用导致的堆栈溢出。
tail recursion 就是指在程序最后一步执行递归。这种函数称为 tail recursion function。举个例子:
这个函数就是普通的递归函数,它在递归之后又进行了 乘 的操作。 这种普通递归,每一次递归调用都会重新推入一个调用堆栈。
把上述调用改成 tail recursion function
tail recursion 的好处是每一次都计算完,将结果传递给下一次调用,然后本次调用任务就结束了,不会参与到下一次的递归调用。这种情况下,只重复用到了一个堆栈。因此可以优化结构。就算是多次循环,也不会出现栈溢出的情况。这就是 tail recursion optimization 。
c和c++都有这种优化, python没有,所以限制了调用次数,就是为了防止无限递归造成的栈溢出。
如果递归次数过多,导致了开头的报错,可以使用 sys 包手动设置recursion的limit
手动放大 recursionlimit 限制:
Q3: Python序列类型的extend和+的区别
刚才写一个Python递归函数,遇到了一个问题,就是序列类型的extend方法和+运算符号的区别。
listA.extend(listB) 和 listA+listB 的效果都是把两个序列类型的元素相加,形成一个新的序列。 extend()的运算效率比+更高。因此我一直都使用extend方法做序列的合并。
但是, listA.extend(listB) 的返回结果是None,而不是合并后的序列。listA序列是合并后的序列。
listA+listB返回的是新的序列。
我在写下面这个递归的函数时因为extend方法的这个特点,得到的总是None对象。 改用+后正常。
def getResourceSelfAndParentsDetail(obj):
if(hasattr(obj,"parent")==False or obj.parent==None):
return [obj]
else:
return [obj]+(getResourceSelfAndParentsDetail(obj.parent))
测试代码:
class Obj(object):
def __init__(self,val):
self.val=val
def __str__(self):
return str(self.val)
pass
if __name__ == '__main__':
obj1=Obj(1)
obj2=Obj(2)
obj3=Obj(3)
obj2.parent=obj1
obj3.parent=obj2
ret=getResourceSelfAndParentsDetail(obj3)
for obj in ret:
print str(obj)
显示正确的
3
2
1
递归函数python特征的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python递归特点、递归函数python特征的信息别忘了在本站进行查找喔。






