【问题标题】:PYTHON: Trouble Understanding this Fibonacci CodePYTHON:无法理解这个斐波那契代码
【发布时间】:2017-12-05 17:59:14
【问题描述】:

我了解斐波那契的工作原理,只是这段代码让我发疯。我可能会出错

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?我可能格式错误,但请解释它是如何发生的

【问题讨论】:

  • 不是(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

标签: python fibonacci


【解决方案1】:

所以它不像返回 (3-1)+(3-2),而是通过执行 fib1(3-1) + fib1(3-2) 来创建 recursive call,调用自身,分解为是 fib1(2) + fib1(1) 返回 1+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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2010-09-22
    • 2014-05-23
    相关资源
    最近更新 更多