Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 斐波那契数打印不超过F(996)_Python - Fatal编程技术网

Python 斐波那契数打印不超过F(996)

Python 斐波那契数打印不超过F(996),python,Python,我写了这个小片段来计算斐波那契数。它适用于996之前的数字,从997开始可以打印回溯。我想不出是什么问题。它是否与最大递归计数有关 def fib(n): if n==0: return 0 elif n==1: return 1 else: return fib(n-1)+n 有一个很棒的Fibonnaci函数实现不使用递归。有一个很棒的Fibonnaci函数实现不使用递归。您的代码可能会遇到堆栈调用限制。您的代码可能会遇到堆栈调用限制。可能。看一看。默认值为1000,这听

我写了这个小片段来计算斐波那契数。它适用于996之前的数字,从997开始可以打印回溯。我想不出是什么问题。它是否与最大递归计数有关

def fib(n):
 if n==0:
  return 0
 elif n==1:
  return 1
 else:
  return fib(n-1)+n

有一个很棒的Fibonnaci函数实现不使用递归。

有一个很棒的Fibonnaci函数实现不使用递归。

您的代码可能会遇到堆栈调用限制。

您的代码可能会遇到堆栈调用限制。

可能。看一看。默认值为1000,这听起来可能是您看到的问题的原因:一旦堆栈上有1000帧(即略少于1000个递归函数调用),您将在下一次函数调用时出错

您可以使用
sys.setrecursionlimit
将递归限制设置为更大的值,但存在一个与平台相关的最大值(这意味着您可能需要通过反复试验来确定它是什么)。

可能。看一看。默认值为1000,这听起来可能是您看到的问题的原因:一旦堆栈上有1000帧(即略少于1000个递归函数调用),您将在下一次函数调用时出错


您可以使用
sys.setrecursionlimit
将递归限制设置为更大的值,但存在一个与平台相关的最大值(这意味着您可能需要通过反复试验来确定它是什么)。

您已达到最大递归深度限制。据我所知,它的默认值大约是1000。您可以更改它sys.setrecursionlimit(),并使用sys.getrecursionlimit()查看它。

您已达到最大递归深度限制。据我所知,它的默认值大约是1000。您可以将其更改为sys.setrecursionlimit(),并使用sys.getrecursionlimit()查看它。

您可以说“它适用于996以下的数字”。。。不,它不会,它会产生错误的结果。最后一行应该是:

return fib(n - 1) + fib(n - 2)
你说“它适用于996以下的数字”。。。不,它不会,它会产生错误的结果。最后一行应该是:

return fib(n - 1) + fib(n - 2)


个人说明:我在10^600之前的解释器中运行此函数,并在不到5秒内获得所有数字。个人说明:我在10^600之前的解释器中运行此函数,并在不到5秒内获得所有数字。当你问这样的问题时,你应该始终张贴堆栈跟踪。@Steven:如果是堆栈溢出问题是回溯将是巨大的。。。但是,是的,结尾的一段摘录会很有帮助。这不是Fibonnaci序列。@David Zaslavsky:是的,但问题基本上是说“正在打印堆栈跟踪。”没有提到错误。虽然我们假定这是一个堆栈溢出,但实际上我们没有看到它是。。。养成这个好习惯;-)当你问这样的问题时,你应该始终发布堆栈跟踪。@史蒂文:如果是堆栈溢出问题,那么回溯将是巨大的。。。但是,是的,结尾的一段摘录会很有帮助。这不是Fibonnaci序列。@David Zaslavsky:是的,但问题基本上是说“正在打印堆栈跟踪。”没有提到错误。虽然我们假定这是一个堆栈溢出,但实际上我们没有看到它是。。。养成这个好习惯;-)问题是,这是计算斐波那契数的糟糕方法。计算第n个斐波那契数需要O(2^n)个递归调用。那么对于小到50的n,你真的想做那么多的工作吗?@woodchips:另一方面,这至少是一种正确的方法。如果我的答案不一定是正确的,我可以非常快地得出答案。这是对原来计算斐波那契数的改进。@woodchips:是的,递归通常效率很低。首先要做的是使它正确。如果OP头脑中没有正确的关系
f(n)=f(n-1)+f(n-2)
?一旦他得到了这一点,并针对(比如)n@woodchips的手动计算验证了递归函数。。是的,我理解这个问题有多严重,我试图用它来实现动态规划技术。为了提高运行的tym,在测试改进版本与此版本的性能时,我得到了这个错误。问题是,这是一种计算斐波那契数的糟糕方法。计算第n个斐波那契数需要O(2^n)个递归调用。那么对于小到50的n,你真的想做那么多的工作吗?@woodchips:另一方面,这至少是一种正确的方法。如果我的答案不一定是正确的,我可以非常快地得出答案。这是对原来计算斐波那契数的改进。@woodchips:是的,递归通常效率很低。首先要做的是使它正确。如果OP头脑中没有正确的关系
f(n)=f(n-1)+f(n-2)
?一旦他得到了这一点,并针对(比如)n@woodchips的手动计算验证了递归函数。。是的,我理解这个问题有多严重,我试图用它来实现动态编程技术。为了改进运行的tym,在测试改进版本与此版本的性能时,我得到了这个错误。