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