#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