【问题标题】:Where is the mistake in my code ( Fibonacci)? [duplicate]我的代码(斐波那契)中的错误在哪里? [复制]
【发布时间】:2020-11-24 23:38:18
【问题描述】:

就是代码(我用的是python 3):

def fibonacci(x):
  if x == 1 or 2:
    return 1
  f = fibonaci(x-1) + fibonaci(x-2) 
  return f

print(fibonacci(4))

我想得到的输出是 3,这是第四个斐波那契数。但是我得到 1 作为输出。

f = fibonaci(x-1) + fibonaci(x-2)

我认为该代码没有做我希望它做的事情。假设我会将fibonacci(3) 作为我的输入。

我认为应该发生的事情:

f = fibonacci(3-1) + fibonacci(3-2)

fibonacci(3-1)fibonacci(3-2) 都应该返回 1 对吗?所以f 应该是 = 2 fibonacci(3) 应该给我 2 作为输出。但我得到的输出仍然是 1。 哪里错了?

【问题讨论】:

  • x == 1 or 2 始终为真。
  • f = fibonaci(x-1) + fibonaci(x-2) ==> f = fibonacci(x-1) + fibonacci(x-2) 这是一件很慢的事情
  • @PatrickArtner 是的,我现在也看到了,谢谢。慢是指代码可以更有效地编写吗?我刚接触递归,也许我将来可以更聪明地写它:D
  • 不要递归。使用没有来自stackoverflow.com/a/499245/7505395的递归的线性版本 - 它更快,更不容易出错。用 fibonaci(100) 试试你的 - 线性版本需要不到 1 秒的时间来给你所有的数字......
  • 也会检查一下,谢谢!我被指派通过递归来完成这项任务,只是为了练习。

标签: python function recursion output fibonacci


【解决方案1】:

错误在于您的if 子句。你的意思大概是这样的:

if x == 1 or x == 2:

因为if 2 始终为“真”,所以对于任何x,您都会得到1

但是,这仍然是错误的,因为在斐波那契数列中,前两个数字是 01,所以:

if x <= 1:
    return x

【讨论】:

  • @PatrickArtner 我做到了。如果他修复了条款/退货,它应该可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多