Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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_Fibonacci - Fatal编程技术网

PYTHON:理解此斐波那契代码有困难

PYTHON:理解此斐波那契代码有困难,python,fibonacci,Python,Fibonacci,我理解斐波那契的工作原理,只是这段代码让我发疯。我可能经历得不对 def fib1(n): if n == 1 or n == 2: return 1 return fib1(n-1) + fib1(n-2) for i in range(1,10): print(fib1(i)) output = 1 1 2 3 5 8 13 21 34 好的,从1开始,它返回1,然后2也返回1,但是3被发送到fib1(n-1)+(n-2),它返回2?,不是(3-1)+(3-2)

我理解斐波那契的工作原理,只是这段代码让我发疯。我可能经历得不对

def fib1(n):
  if n == 1 or n == 2:
    return 1 
  return fib1(n-1) + fib1(n-2)


for i in range(1,10):
  print(fib1(i))

output = 1 1 2 3 5 8 13 21 34

好的,从1开始,它返回1,然后2也返回1,但是3被发送到fib1(n-1)+(n-2),它返回2?,不是(3-1)+(3-2)==3吗?我可能格式化错误,但请解释它是如何发生的,所以它不像返回(3-1)+(3-2),它通过执行fib1(3-1)+fib1(3-2)来进行自我调用,它分解为返回1+1的fib1(2)+fib1(1)

我们可以通过浏览fib1(4)来解决这个问题:

fibl1(4)->fibl(4-1)+fibl(4-2)

fib1(4)->fibl(3)+fibl1(2)

fibl(4)->(fibl(3-1)+fibl(3-2))+1(2是基本情况,因此返回1)

fibl(4)->(fibl(2)+fibl(1))+1

fibl(4)->(1+1)+1

fibl(4)->3

它不是
(2)+(1)
它是
fib(2)+fib(1)
。什么是fib(1)?什么是fib(2)?它不是
(n-1)+(n-2)
。它是
fib1(n-1)+fib1(n-2)
。这叫做递归。但是,不幸的是,为了理解递归,你必须首先理解递归……当
n==3
时,它不会返回
(3-1)+(3-2)
它返回
fib1(3-1)+fib1(3-2)
=
fib1(2)+fib1(1)
,即1+1==2