Преобразовать итерационную функцию в рекурсивную. Проверка на попарное различие цифр в числе - C (СИ)
Формулировка задачи:
bool T(int buf){ bool flag=true; while(buf>0 && flag){ int x=buf%10; buf/=10; int bufb=buf; while(bufb>0 && flag){ if(x==bufb%10) flag=false; bufb/=10; } } if(flag) return 1; return 0; }
Я гуглил.
Окей, упрощаем до "как задать рекурсию, чтобы она сравнивала значения каждого с каждым элемента массива?"
Решение задачи: «Преобразовать итерационную функцию в рекурсивную. Проверка на попарное различие цифр в числе»
textual
Листинг программы
UniqueDigits(long x) { unsigned short set = 0, temp; while(x > 0) { temp = 1 << (x % 10); if (set & temp) return 0; set |= temp; x /= 10; } return 1; }
Объяснение кода листинга программы
В данном коде представлена функция UniqueDigits
, которая принимает на вход целое число x
и проверяет, является ли это число уникальным по своим цифрам (то есть, нет ли в числе двух одинаковых цифр).
Внутри функции имеются следующие действия:
- Создается переменная типа
unsigned short
под названиемset
, которая инициализируется значением 0. Эта переменная будет использоваться для отслеживания уже встреченных цифр. - Создается переменная типа
unsigned short
под названиемtemp
, которая инициализируется значением 1 << (x % 10). Здесь%
используется для получения остатка от деленияx
на 10 (то есть, мы получаем последнюю цифру числаx
). После этого с помощью сдвига вправо (>>
) мы устанавливаем вtemp
значение 1 в соответствующую позицию (если последняя цифра числаx
равна 0, то вtemp
будет установлен ноль, если 1, то единица, если 2, то двойка и т.д.). - Проверяется, есть ли в переменной
set
значение, установленное в переменнойtemp
. Если да, то это означает, что в числе уже есть такая цифра, и функция возвращает значение 0. - Если в предыдущем шаге не было возврата, то значение
temp
объединяется с переменнойset
с помощью оператора|=
. Это означает, что вset
устанавливается новое значение, равное текущему значениюset
с добавлением значенияtemp
. - Значение
x
делится на 10 с помощью оператора/=
. Это означает, что мы удаляем последнюю цифру числаx
и переходим к следующей. - Если все цифры числа были проверены, то функция возвращает значение 1. Таким образом, данный код проверяет уникальность числа по его цифрам. Если число уникально, то функция возвращает 1, если нет - возвращает 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д