2016-07-08 3 views
-1

Я застрял здесь. Для n = 5 и k = 3 ответ должен быть 19. Если установить k = 3 отдельно в качестве локальной или глобальной переменной и запустить wabbits(5), я получаю 19, но когда я бегу wabbits(5, 3) после функции ниже, я получаюTypeError в python - отсутствует 1 обязательный позиционный аргумент

TypeError: wabbits() missing 1 required positional argument: 'k' 

Что я делаю неправильно?

def wabbits(n, k): 
    if n == 1: 
     return 1 
    if n == 2: 
     return 1 
    return wabbits(n-2)*k + wabbits(n-1) 
+0

Вы отсутствующий аргумент K – Li357

+0

'функция wabbits' принимает два аргумента. сначала 'n', а второй -' k'. но в коде 'wabbits (n-2)' означает, что ур передает только один параметр. –

+0

Вы не можете запустить 'wabbits (5)', поскольку это даст вам ту же ошибку. –

ответ

4

Ваш wabbits() функция принимает два аргумента:

def wabbits(n, k): 
#   1 2 

но ваш код вызывает его только с одним:

return wabbits(n-2)*k + wabbits(n-1) 
#    ^^^    ^^^^ 

Вы должны передавать значение для k а , Вы можете просто передать текущее значение k:

def wabbits(n, k): 
    if n == 1: 
     return 1 
    if n == 2: 
     return 1 
    return wabbits(n-2, k)*k + wabbits(n-1, k) 
    #    1 2    1 2 

и в самом деле, что дает 19:

>>> def wabbits(n, k): 
...  if n == 1: 
...   return 1 
...  if n == 2: 
...   return 1 
...  return wabbits(n-2, k)*k + wabbits(n-1, k) 
... 
>>> wabbits(5, 3) 
19 
+0

Ты просто гений. :) –

0

Вызов функции с wabbits(5) не будет работать, потому что функция объявлена ​​принимать параметры : n и k. Оба должны быть поставлены.

Вы можете вызвать функцию с двумя аргументами, но беда в том, что рекурсивный вызов wabbits() проходит только один аргумент:

wabbits(n-2) * k + wabbits(n-1) 

Это два вызова wabbits() у первой один аргумент n-2 а второй также имеет только один аргумент n-1. Поскольку wabbits() должен вызываться с двумя аргументами, исключение TypeError исключается, как вы заметили.

0

несколько решений, самое простое:

def wabbits(n, k): 
    if n == 1: 
     return 1 
    elif n == 2: 
     return 1 
    return wabbits(n-2, k)*k + wabbits(n-1, k) 

r = wabbits(5, 3) 

Однако можно инкапсулировать k используя внутреннюю функцию:

def wabbits(n, k): 

    def bunnies(rn): 
     if rn == 1: 
      return 1 
     elif rn == 2: 
      return 1 
     return bunnies(rn-2)*k + bunnies(rn-1) 

    return bunnies(n) 

r = wabbits(5, 3) 
Смежные вопросы