Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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 递归序列-泛型方法_Python_Recursion - Fatal编程技术网

Python 递归序列-泛型方法

Python 递归序列-泛型方法,python,recursion,Python,Recursion,下面是斐波那契数的经典递归示例 def fib(n): assert type(n) == int & n >= 0 if n == 0 or n == 1: return 1 else: return fib(n-1) + fib(n-2) fib(5) #=> 8 当我们调用fib(5)时,当代码被执行时,fib()fcn的最后一行中的fib(n-1)和fib(n-2)是否会被执行?也就是说,询问是先调用fib

下面是斐波那契数的经典递归示例

def fib(n):
    assert type(n) == int & n >= 0
    if n == 0 or n == 1:
        return 1
    else:
        return fib(n-1) + fib(n-2) 

fib(5) #=> 8

当我们调用fib(5)时,当代码被执行时,fib()fcn的最后一行中的fib(n-1)和fib(n-2)是否会被执行?也就是说,询问是先调用fib(n-1)部分,然后等待返回,然后是fib(n-2)部分,还是它们并行出现?

首先计算fib(n-1)部分,然后是fib(n-2)部分。

首先计算fib(n-1)部分,然后再计算fib(n-2)部分。

否,两种计算都将按顺序进行,是的,这是一种非常浪费的计算斐波那契级数的方法

不太浪费的递归函数返回两个连续数字(当前和以前):


一种更好的方法,更有效。

不,两种计算都将按顺序进行,是的,这是一种非常浪费的计算斐波那契级数的方法

不太浪费的递归函数返回两个连续数字(当前和以前):


更好的方法,更有效。

它们将按写入顺序依次计算。它们将按写入顺序依次计算。
def fib2(n):
  if n == 1:
    return (0, 1)
  else:
    prev_1, prev_2 = fib2(n-1)
    return (prev_1 + prev_2, prev_1)

def fib(n):
    value, _ = fib2(n)
    return value