Фибоначчи Python неопознанный отступ - PullRequest
0 голосов
/ 20 октября 2018

Я новичок в коде и изучении Python.Я получил домашнее задание, чтобы напечатать числа Фибоначчи для N = 11 и N = 200, используя метод, названный Memoization.Я нашел решение, но когда я запускаю код, я получаю две вещи: 1.

 Traceback (most recent call last):
      **File "python", line 7
        if n== 1:
        ^**
**IndentationError: unexpected indent**

и второй раз я получил пустой результат, когда я бегу.что не так какой код:

def fibonacci (n) :
 # If we have cached the value, then return it 
 if n in fibonacci_cache:
   return fibonacci_cache[n]

   # Compute the Nth term 
      if n== 1:
       value = 1
       elif n == 2:
         value = 1 
         elif n > 2:
           value = fibonacci(n-1) + fibonacci(n-2)

           # Cache the value and return it 
           fibonacci_cache[n] = value
           return value

             print(n, ":", fibonacchi(11))

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

См. @Alexis Drakopoulos для прямого исправления вашего кода.Если вы хотите упростить реализацию заметок, вы можете использовать декоратор lru_cache.

from functools import lru_cache

@lru_cache(maxsize=None)
def fibonacci(n):
    if n<= 2:
        return 1
    return fibonacci(n-1)+fibonacci(n-2)
0 голосов
/ 20 октября 2018

Добро пожаловать в программирование на Python и в StackOverflow: -)

Есть три проблемы с вашим кодом:

1.Отступы: Python требует, чтобы вы обращали внимание на отступы, так что код на определенном уровне имеет отступ в одинаковом количестве.

Для кода, который выполняется после чего-то вроде оператора if, вам нужно поставитьследующий блок кода с отступом.Затем, когда у вас есть elif (который находится на том же уровне, что и оператор if), вам нужно вернуть отступ, чтобы он соответствовал уровню if.

Вы можете сделать отступ с пробелами или табуляцией, но выдолжно быть согласованным (т.е. придерживаться одного)

Возможно, используемый вами редактор испортил намерение при вставке кода, а также возможно, что некоторые отступы были испорчены, когдаВы также помещаете его в StackOverflow, но вам нужно, чтобы он выглядел так, как показано ниже.В этом случае каждое намерение - это два пробела (, поэтому в отступе сначала нет пробелов, затем два пробела, затем четыре пробела и т. Д. )

2.Опечатки: В последнем утверждении есть опечатка (поэтому вы на самом деле не вызываете определяемую вами функцию!)

3.Fibbonacci_cache: он не определен, поэтому он был добавлен вверху

Надеюсь, что это поможет - удачи вам в оставшейся части вашего путешествия в программирование ... ему потребуется настойчивость, но вы получитеЯ уверен, что время зависло!

fibonacci_cache = {}

def fibonacci (n) :
  # If we have cached the value, then return it 
  if n in fibonacci_cache:
    return fibonacci_cache[n]

  # Compute the Nth term 
  if n== 1:
    value = 1
  elif n == 2:
    value = 1 
  elif n > 2:
    value = fibonacci(n-1) + fibonacci(n-2)

  # Cache the value and return it 
  fibonacci_cache[n] = value
  return value

print("n:", fibonacci(11))
0 голосов
/ 20 октября 2018
def fibonacci(n):

    # If we have cached the value, then return it
    if n in fibonacci_cache:
        return fibonacci_cache[n]

    # Compute the Nth term
    if n == 1:
        value = 1
    elif n == 2:
        value = 1
    elif n > 2:
        value = fibonacci(n-1) + fibonacci(n-2)

        # Cache the value and return it
        fibonacci_cache[n] = value
        return value

    print(n, ":", fibonacchi(11))

в Python отступ - это все, я не уверен, правильно ли это с последними строками с кешем.

Я предлагаю использовать 4 пробела (используя табуляции), чтобы быть последовательными.

Python просматривает отступы, чтобы понять, что вы пытаетесь сделать.

...