Разберём данную функцию, чтобы понять, какое значение она вернёт для числа 2017.
Анализ функции:
def f(n): S = 0 while (n != 0): S = S + n % 2 n = n // 2 return(S)Функция
fпринимает одно целое числоnи выполняет следующие операции:- Инициализирует переменную
Sзначением 0. Эта переменная будет накапливать сумму единиц, найденных в двоичном представлении числаn. - С помощью цикла
while (n != 0)функция продолжает работать, покаnне станет равным 0. - В каждой итерации цикла:
n % 2возвращает остаток от деленияnна 2, который равен 1, еслиnнечётное, и 0, если чётное. Это значение добавляется кS.- Затем
nобновляется с помощью целочисленного деления на 2 (n = n // 2), что сдвигает числоnвправо в двоичном представлении.
- Инициализирует переменную
Пошаговое выполнение:
Теперь давайте посмотрим, как функция будет работать на примере числа 2017.
- 2017 в двоичном виде:
11111011101
В двоичном представлении у нас есть 11 бит, из которых 8 единиц (1). Теперь давайте найдём, сколько единиц будет в числе 2017:
n = 2017:S = 0,n % 2 = 1→S = 1,n = 1008n = 1008:S = 1,n % 2 = 0→S = 1,n = 504n = 504:S = 1,n % 2 = 0→S = 1,n = 252n = 252:S = 1,n % 2 = 0→S = 1,n = 126n = 126:S = 1,n % 2 = 0→S = 1,n = 63n = 63:S = 1,n % 2 = 1→S = 2,n = 31n = 31:S = 2,n % 2 = 1→S = 3,n = 15n = 15:S = 3,n % 2 = 1→S = 4,n = 7n = 7:S = 4,n % 2 = 1→S = 5,n = 3n = 3:S = 5,n % 2 = 1→S = 6,n = 1n = 1:S = 6,n % 2 = 1→S = 7,n = 0
На этом этапе
nстановится 0, и цикл завершает свою работу.- 2017 в двоичном виде:
Итог:
- Функция возвращает 7, так как в двоичном представлении числа 2017 (т.е.
11111011101) содержится 8 единиц.
- Функция возвращает 7, так как в двоичном представлении числа 2017 (т.е.
Таким образом, функция f(2017) вернёт значение 7.