精华内容
下载资源
问答
  • 1:return sumelse:return recursiveFunction(n-1, sum+n)c = 998print(recursiveFunction(c, 0))它可以工作到n = 997,然后中断并吐出“比较时超出了最大递归深度” RuntimeError 。 这仅仅是堆...

    我在这里有这个尾部递归函数:

    def recursiveFunction(n, sum):

    if n < 1:

    return sum

    else:

    return recursiveFunction(n-1, sum+n)

    c = 998

    print(recursiveFunction(c, 0))

    它可以工作到n = 997,然后中断并吐出“比较时超出了最大递归深度” RuntimeError 。 这仅仅是堆栈溢出吗? 有办法解决吗?

    #1楼

    我意识到这是一个老问题,但是对于那些阅读者,我建议不要对此类问题使用递归-列表要快得多,并且完全避免递归。 我将其实现为:

    def fibonacci(n):

    f = [0,1,1]

    for i in xrange(3,n):

    f.append(f[i-1] + f[i-2])

    return 'The %.0fth fibonacci number is: %.0f' % (n,f[-1])

    (如果您开始从0而不是1开始计数斐波那契数列,请在xrange中使用n + 1。)

    #2楼

    错误“超出最大递归深度”时,我遇到了类似的问题。 我发现错误是由os.walk遍历的目录中的损坏文件触发的。 如果您无法解决此问题,并且正在使用文件路径,请确保将其范围缩小,因为它可能是损坏的文件。

    #3楼

    使用发电机?

    def fib():

    a, b = 0, 1

    while True:

    yield a

    a, b = b, a + b

    fibs = fib() #seems to be the only way to get the following line to work is to

    #assign the infinite generator to a variable

    f = [fibs.next() for x in xrange(1001)]

    for num in f:

    print num

    #4楼

    当然,可以通过应用Binet公式在O(n)中计算斐波那契数:

    from math import floor, sqrt

    def fib(n):

    return int(floor(((1+sqrt(5))**n-(1-sqrt(5))**n)/(2**n*sqrt(5))+0.5))

    正如评论者所指出的,由于2**n它不是O(1)而是O(n)。 另外一个区别是,您仅获得一个值,而通过递归获得的Fibonacci(n)所有值均达到该值。

    #5楼

    import sys

    sys.setrecursionlimit(1500)

    展开全文
  • 因此,我得到的是一系列...)但是,当对某些字符执行函数测试时,它工作得很好,但对于其他一些字符(如D或L),它给了我一个“最大递归深度到达误差”。在也适用于前面的字符,如$&amp;(,),。02468:&lt;@B...

    因此,我得到的是一系列在字符串中搜索目标值的函数。

    (例如:在$&amp;(*,)中查找R,。02468:&lt;@BDFHJLNPRTVXZ\^`bdfhj,H在索引18处找到。)

    但是,当对某些字符执行函数测试时,它工作得很好,但对于其他一些字符(如D或L),它给了我一个“最大递归深度到达误差”。在

    也适用于前面的字符,如$&amp;(,),。02468:&lt;@BDFHJLNPRTVXZ\^`bdfhj,结果是“找不到”*

    作为一个python新手,我很难看到这些函数有什么问题,那么这里似乎有什么问题呢?在

    编辑----------

    很抱歉,我的意思是在导致最大递归深度错误的函数中出现了什么错误,以及如何开始测试这些函数。def str_search( data, target, start, end ):

    """

    str_search : String String NatNum NatNum -> NatNum or NoneType

    Description:

    Search for a target value in a sorted data string.

    The search happens between the start and end indices inclusively.

    This starts searching in the middle. If it finds the target, it is done.

    Otherwise it decides whether to search the first half or the second half.

    preconditions: the data string is in ascending alphanumeric order.

    Parameters:

    data - a string

    target - the target value to find is a single character string e.g. 'Q'

    start - the starting index into the data

    end - the ending index into the data

    Returns:

    index of target in data, if present; otherwise None.

    """

    if start == end:

    return None

    mid_index = ( start + end ) // 2

    mid_value = data[mid_index]

    # debug statement prints the data.

    #print( "Searching for", target, ":", data[start:mid_index],

    # "*" + str( mid_value ) + "*", data[mid_index+1:end+1] )

    if target == mid_value:

    return mid_index

    elif target < mid_value:

    return str_search( data, target, start, mid_index-1 )

    else:

    return str_search( data, target, mid_index, end )

    def find_target( data, target ):

    """

    find_target : String String -> NatNum or NoneType

    find_target returns the index of target in data or None if not found.

    Parameters:

    data - a string

    target - the target value to find

    Returns:

    The index of the target element in data, if present, or None.

    """

    return str_search( data, target, 0, len( data ) - 1 )

    def makeString():

    """

    makeString : () -> String

    makeString returns a String

    """

    data = ""

    # append characters to make the string

    for num in range( 36, 108, 2 ):

    data += chr( num )

    return data

    def main_search():

    """

    main_search : Void -> NoneType

    """

    data = makeString()

    print( "Number of elements: ", len( data ) )

    while True:

    print( "\nData: ", data )

    target = input( "Enter a character to find: " )

    if target == "":

    break

    else:

    index = find_target( data, target )

    print()

    if index != None:

    print( target, "found at index", index )

    else:

    print( target, "not found" )

    # end while

    展开全文
  • 最大递归深度错误只是另一个异常;您可以捕获^{} exception(Python 3.5或更高版本):try:solveMaze(maze)except RecursionError as re:print('Sorry but this maze solver was not able to finish ''analyzing the ...

    最大递归深度错误只是另一个异常;您可以捕获^{} exception(Python 3.5或更高版本):try:

    solveMaze(maze)

    except RecursionError as re:

    print('Sorry but this maze solver was not able to finish '

    'analyzing the maze: {}'.format(re.args[0]))

    我已经合并了附加到运行时异常的错误消息;对于递归错误是maximum recursion depth exceeded。

    如果需要支持早于3.5的Python版本,可以捕获基类^{}。如果您担心捕获而不是递归深度错误的运行时错误,那么您可以内省.args[0]值:try:

    solveMaze(maze)

    except RuntimeError as re:

    if re.args[0] != 'maximum recursion depth exceeded':

    # different type of runtime error

    raise

    print('Sorry but this maze solver was not able to finish '

    'analyzing the maze: {}'.format(re.args[0]))

    选项演示:>>> def infinity(): return infinity()

    ...

    >>> try:

    ... infinity()

    ... except RecursionError as re:

    ... print('Oopsie: {}'.format(re.args[0]))

    ...

    Oopsie: maximum recursion depth exceeded

    >>> def alter_dict_size():

    ... dct = {'foo': 'bar'}

    ... for key in dct:

    ... del dct['foo']

    ...

    >>> try:

    ... alter_dict_size()

    ... except RuntimeError as re:

    ... print('Oopsie: {}'.format(re.args[0]))

    ...

    Oopsie: dictionary changed size during iteration

    >>> try:

    ... infinity()

    ... except RuntimeError as re:

    ... if re.args[0] != 'maximum recursion depth exceeded':

    ... raise

    ... print('Oopsie: {}'.format(re.args[0]))

    ...

    Oopsie: maximum recursion depth exceeded

    >>> try:

    ... alter_dict_size()

    ... except RuntimeError as re:

    ... if re.args[0] != 'maximum recursion depth exceeded':

    ... raise

    ... print('Oopsie: {}'.format(re.args[0]))

    ...

    Traceback (most recent call last):

    File "", line 2, in

    File "", line 3, in alter_dict_size

    RuntimeError: dictionary changed size during iteration

    改变字典大小也会引发RuntimeError异常,但是测试生成的异常消息允许您区分。

    展开全文
  • 今天小编就为大家分享一篇关于Python中最大递归深度值的探讨,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 我有以下递归代码,在每个节点上我都调用sql查询来获取属于父节点的节点。这是错误:Exception RuntimeError: 'maximum recursion depth exceeded' in > ignoredRuntimeError: maximum recursion depth exceeded ...

    我有以下递归代码,在每个节点上我都调用sql查询来获取属于父节点的节点。

    这是错误:

    Exception RuntimeError: 'maximum recursion depth exceeded' in > ignored

    RuntimeError: maximum recursion depth exceeded while calling a Python object

    Exception AttributeError: "'DictCursor' object has no attribute 'connection'" in > ignored

    我调用以获得sql结果的方法:

    def returnCategoryQuery(query, variables={}):

    cursor = db.cursor(cursors.DictCursor);

    catResults = [];

    try:

    cursor.execute(query, variables);

    for categoryRow in cursor.fetchall():

    catResults.append(categoryRow['cl_to']);

    return catResults;

    except Exception, e:

    traceback.print_exc();

    我实际上对上述方法没有任何问题,但是我还是把它放在了问题的适当位置。

    递归代码:

    def leaves(first, path=[]):

    if first:

    for elem in first:

    if elem.lower() != 'someString'.lower():

    if elem not in path:

    queryVariable = {'title': elem}

    for sublist in leaves(returnCategoryQuery(categoryQuery, variables=queryVariable)):

    path.append(sublist)

    yield sublist

    yield elem

    调用递归函数

    for key, value in idTitleDictionary.iteritems():

    for startCategory in value[0]:

    print startCategory + " ==== Start Category";

    categoryResults = [];

    try:

    categoryRow = "";

    baseCategoryTree[startCategory] = [];

    #print categoryQuery % {'title': startCategory};

    cursor.execute(categoryQuery, {'title': startCategory});

    done = False;

    while not done:

    categoryRow = cursor.fetchone();

    if not categoryRow:

    done = True;

    continue;

    如果递归太深,则在调用递归函数时会出现错误,但是在打印字典时出现此错误。

    展开全文
  • 我有以下递归代码,在每个节点我调用sql查询以获取属于父节点的节点.这是错误:Exception RuntimeError: 'maximum recursion depth exceeded' in > ignoredRuntimeError: maximum recursion depth exceeded while ...
  • 1:return sumelse:return recursiveFunction(n-1, sum+n)c = 998print(recursiveFunction(c, 0))它可以工作到n = 997,然后中断并吐出“比较时超出了最大递归深度” RuntimeError 。 这仅仅是堆...
  • 用以下的代码可以求出在本机最大递归深度,用二分法测出来的。 不知道python和c++为什么差这么多 Python: def get_dep(num): if num == 1: return 1 else: return num * get_dep(num-1) print(ge...
  • 谢谢开发者!不着急不着急,咱们一起发现问题,解决问题哈。1.关于登陆的问题,我用的是土办法解决,它除了命令行生成二维码,还会生成一张QR.jpg的图片,我索性把图片扫出来。实现了登录,提示正常。...
  • Python具有最大递归深度,但没有最大迭代深度.为什么递归受限制?像迭代这样处理递归是不是更自然,而不是限制递归调用的数量?我只想说这个问题的根源来自于尝试实现流(有关流的更多详细信息,请参阅this question)....
  • 如果有一个相当复杂的迷宫,我会得到一个最大递归深度误差.我在这个网站上搜索了这个错误并阅读了帖子,所以我相信我对正在发生的事情有一个大致的了解.与我看到的其他线程不同,我不是试图增加递归限制. sys....
  • 我有以下递归代码,在每个节点上我都调用sql查询来获取属于父节点的节点。这是错误:Exception RuntimeError: 'maximum recursion depth exceeded' in > ignoredRuntimeError: maximum recursion depth exceeded ...
  • Python对递归函数设置是有默认值。 可以通过下面命令来查看设置的默认值>>> import sys>>> sys.getrecursionlimit()3000查看该函数的帮助文件就更清晰了:>>> help(sys.getrecursionlimit...
  • int(value)) class Insan(object): yas = NumberDescriptor() a = Insan() print a.yas a.yas = "osman" print a.yas 我在行名= [如果getattr(owner,attr)是self的dir(owner)中attr的attr)中遇到最大递归深度错误....
  • 显示超出递归深度。我首先在configue.py中手动设定了深度,在30000左后报错SegmentationFault 我换成Python3的环境,依然报错超出递归深度。 请问问题出在哪呢?</p><p>该提问来源于开源项目ÿ...
  • python 最大递归深度问题

    千次阅读 2019-01-08 21:03:20
    python 递归深度 最近在学习算法相关内容, 当学习到快速排序时想到一个问题, 在最差情况下, 快速排序是否优于选择排序, 于是生成一个 3000 个元素的降序列表,分别使用选择排序和快速排序对其升序排序代码如下: # –*...
  • if child not in child_dic.keys(): child_dic[child["id"]]=1 当我用他的代码来查找json树有的孩子数时, 我收到一个错误 调用Python对象时超出了最大递归深度. 请帮我一样. 最佳答案 你有一棵树的深度超过了998级...
  • 观察到的行为受到HotSpot优化器的影响,但这不是唯一的原因。当我运行以下代码public static void main(String[] argv) {System.out.println(System.getProperty("java.version"));System.out.println(countDepth())...
  • 小编典典观察到的行为受到HotSpot优化器的影响,但这不是唯一的原因。当我运行以下代码public static void main(String[] argv) {System.out.println(System.getProperty("java.version"));System.out.println...
  • 但是,当它确实到达函数setter for position,并执行copy()函数时,我收到错误消息:RuntimeError:调用Python对象时超出了最大递归深度 . 我尝试了不同的选项,比如deepcopy(),或者导入sys sys.setrecursionlimit...
  • 观察到的行为受到HotSpot优化器的影响,但不是唯一的原因。当我运行下面的代码public static void main(String[] argv) {System.out.println(System.getProperty("java.version"));System.out.println(countDepth())...
  • 这显然是JVM,也可能是架构特定的。...然而,这意味着你没有希望可靠地预测最大递归深度,直到可以可靠地预测递归函数是否已经被JIT编译。 所有这些都使用大小为128K和8MB的ulimit堆栈进行测试。两种情况下的结果相同。
  • 但是,这确实意味着您没有希望可靠地预测最大递归深度,直到您可以可靠地预测是否已对JIT编译了递归函数。 所有这些都通过ulimit堆栈大小为128K和8MB进行了测试。 在两种情况下结果都是相同的。
  • 在函数调用时,为了...对于函数递归调用,会将大量的上下文信息入栈,如果递归深度过大,会导致线程栈空间不足而崩溃。在Python中,为了防止栈崩溃,默认递归深度是有限的。# 这是一个简单的递归函数def demo(n=0...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,042
精华内容 1,216
关键字:

最大递归深度