я не могу обернуть мою голову вокруг, как работает эта простая рекурсивная функция:printbinary рекурсивного алгоритма
void printBinary(const int& n)
{
if(n < 2)
{
cout << n;
}
else
{
printBinary(n/2);
printBinary(n % 2);
}
}
Я знаю, что есть что-то делать с п/2 «рубить» с последней цифрой двоичного представления и n% 2, давая такую последнюю цифру двоичного представления, но когда я рекурсивно отслеживаю этот код, он просто кажется магическим. Я не могу придумать простого логического объяснения.
Edit: This является отличным объяснением алгоритма, и ведет меня к виду перефразировать мой вопрос: почему п% 2, или остаток десятичного числа, дают вам двоичные цифры такого числа. Какова логика этого?
Вы понимаете, почему 'n% 10' дает вам последнюю цифру-10? Тогда 'n% 2' одинаково в базе 2. – interjay
Хорошо, поэтому он применяется ко всем базам ... Я предполагаю, что это просто то, что вы должны принять как факт, и не спрашиваете, почему остаток является цифрой в двоичном представлении? –
Это потому, что число «a0 + 2 * a1 + 4 * a2 + 8 * a3 + ...» где a0, a1, ... - двоичные цифры справа налево. Если вы выработаете коэффициент и остаток на 2, вы получите 'a1 + 2 * a2 + 4 * a3 + ...' и 'a0' соответственно. – interjay