您的位置:首页 > 脚本大全 > > 正文

python中递归方法(Python中最大递归深度值的探讨)

更多 时间:2022-01-15 01:35:40 类别:脚本大全 浏览量:2559

python中递归方法

Python中最大递归深度值的探讨

python对递归函数设置是有默认值。 可以通过下面命令来查看设置的默认值

  • ?
  • 1
  • 2
  • 3
  • >>> import sys
  • >>> sys.getrecursionlimit()
  • 3000
  • 查看该函数的帮助文件就更清晰了:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • >>> help(sys.getrecursionlimit)
  • help on built-in function getrecursionlimit in module sys:
  • getrecursionlimit(...)
  •  getrecursionlimit()
  •  return the current value of the recursion limit, the maximum depth
  •  of the python interpreter stack. this limit prevents infinite
  •  recursion from causing an overflow of the c stack and crashing python.
  • 从上面的帮助信息可以看到,如果超过这个默认的最大递归深度,就会导致不可预测的错误,比如c栈溢出或其他错误。 下面用斐波那契数列的递归函数来测试下该方法,来看真正可行的最大递归深度.

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • >>> def fib(n):
  • ...  if n == 1:
  • ...   return 1
  • ...  else:
  • ...   return fib(n-1) + n
  • >>> fib(2989)
  • 4468555
  • 当执行到默认的3000附近,2989时,上面是可以执行到的。当递归深度到2900时就报错了。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • >>> fib(2990)
  • traceback (most recent call last):
  •  file "<stdin>", line 1, in <module>
  •  file "<stdin>", line 5, in fib
  •  file "<stdin>", line 5, in fib
  •  file "<stdin>", line 5, in fib
  •  [previous line repeated 2985 more times]
  •  file "<stdin>", line 2, in fib
  • recursionerror: maximum recursion depth exceeded in comparison
  • maximum recursion depth exceeded in comparison
  • 也就是最大的实际递归深度就是2989了,是否可以设置这个值大点呢? 可以通过这个方法来设置:

  • ?
  • 1
  • 2
  • 3
  • 4
  • >>> import sys
  • >>> sys.setrecursionlimit(10000)
  • >>> sys.getrecursionlimit()
  • 10000
  • 通过setrecursionlimit(10000)后再查看就是10000。再来测试下实际上的递归深度可以到多少,看是否在2989上有所增加呢?

    python中递归方法(Python中最大递归深度值的探讨)

    可以看到我们设置最大递归深度10000,实际执行递归深度达到3400,不再报recursionerror错误,但会报关闭程序的提示。通过一个个单独调试,到3213还能显示正常答案。到3214就又报上面的提示了。

  • ?
  • 1
  • 2
  • >>> fib(3213)
  • 5163291
  • 上面的是python3.6.5得出的实际最大递归数字:3213。

    同样一台计算机,用python2.7.10,同样设置成默认最大递归深度10000,得出实际最大递归深度是4484

  • ?
  • 1
  • 2
  • >>> fib(4484)
  • 10055370
  • 所以最终这个数字取决于计算机本身的计算能力和python的版本,如果超过系统堆栈深度,python无法支撑也就奔溃了。同样的pc,python的版本不同,这个值都有差异。有的时候差异还很大。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接

    原文链接:https://blog.csdn.net/Jerry_1126/article/details/85331736

    您可能感兴趣