Почему рекурсия не работает в вопросе leetcode?

#python #python-3.x #function #recursion

#python #python-3.x #функция #рекурсия

Вопрос:

Я пытаюсь решить простой вопрос с помощью рекурсии.

Учитывая неотрицательное целое число, верните количество шагов, чтобы уменьшить его до нуля. Если текущее число четное, вы должны разделить его на 2, в противном случае вам придется вычесть из него 1.

Я предоставил свое решение в виде:

 class Solution:
    def numberOfSteps(self, num: int) -> int:
            if num!=0:
                if num%2==0:
                    return 1  numberOfSteps(num//2)
                else:
                    return 1  numberOfSteps(num-1)
            else:
                return 0
  

Однако я сталкиваюсь с этой ошибкой:

 NameError: name 'numberOfSteps' is not defined
    return 1  numberOfSteps(num//2)
Line 5 in numberOfSteps (Solution.py)
    ret = Solution().numberOfSteps (param_1)
Line 29 in _driver (Solution.py)
    _driver()
Line 40 in <module> (Solution.py)
  

Комментарии:

1. Вам нужно использовать self.numberOfSteps вместо numberOfSteps при его вызове.

2. Вам действительно нужно помещать это в класс?

3. @ThierryLathuille Я подозреваю, что этого требует веб-сайт Leetcode.

4. @ThierryLathuille именно так обстоит дело в leetcode, вы не можете изменить объявление функции

5. @ArnavBagchi Альтернативное решение: b = bin(num)[2:]; return len(b) b.count('1') - 1 — Я оставлю вас разбираться, почему это работает.

Ответ №1:

 class Solution:
    def numberOfSteps(self, num: int) -> int:
            if num!=0:
                if num%2==0:
                    return 1  self.numberOfSteps(num//2)
                else:
                    return 1  self.numberOfSteps(num-1)
            else:
                return 1