Привет! Давай разберемся с этой задачей.
Нам нужно написать рекурсивную функцию binary_power(n), которая проверяет, является ли число n степенью двойки. Если да, то возвращает саму степень (например, для 8 вернет 3, потому что 23 = 8). Если нет, то возвращает False.
n равно 1, это 20, так что степень — 0.n меньше 1 (или равно 0), оно точно не является натуральной степенью двойки, поэтому возвращаем False.n четное (делится на 2 без остатка), то мы можем разделить его на 2 и рекурсивно вызвать функцию для n / 2. К результату этого вызова добавим 1 (так как мы поделили на 2, увеличивая степень на 1).False.binary_power(1024)binary_power(512) + 1binary_power(256) + 1 + 1binary_power(4) + 1 + 1 + 1 + 1 + 1 + 1 + 1binary_power(2) + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1binary_power(1) + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1binary_power(1) возвращает 0.binary_power(42)binary_power(21) + 1binary_power(21) возвращает False.False + 1 = False.def binary_power(n):
if n == 1:
return 0
if n < 1 or n % 2 != 0:
return False
result = binary_power(n / 2)
if result is False:
return False
else:
return result + 1
Ответ:
print(binary_power(1024)) выведет 10print(binary_power(42)) выведет False