Я рекомендую вам структурировать ваш код более точно.Вы можете разбить неопределенно заданную вами задачу на различные подзадачи, например:
- для определения и нормализации знаков числа и базы (вам нужно для поддержки отрицательных значений)оснований, или вы можете просто вызвать исключение?), также гарантируя, что немедленное исключение возникает в случаях ошибок (например, основание
0
или 1
); - написать функцию, которая (дает положительное иправильные значения для
a
и b
) возвращают «последовательность цифр» для представления a
в базе b
, где «цифра» - это целое число между 0
включенными и b
исключенными; - напишите функцию, которая с учетом расширений знака и последовательности цифр строит и возвращает строковое представление - зависит от того, как вы хотите представить очень большие «цифры», когда b велико, например> 36, если вы хотитеиспользуйте цифры, затем буквы ASCII, для первых 36 цифр очевидным образом;возможно, вам следует принять строку «алфавита», чтобы использовать ее для этой цели (и первая вышеупомянутая функция должна вызывать исключение, когда b слишком велика для данного алфавита)
- написать функцию, которая использует все вышеперечисленные для печатистрока out
Из этих задач только вторая может рассматриваться как подходящая для «рекурсивной» реализации, если кто-то настаивает (хотя итеративная реализация на самом деле намного более естественна!) - учитываячто это домашнее задание, я думаю, вам придется делать это рекурсивно, потому что это часть назначенного задания, ну что ж! -).Но, для справки, одним очевидным способом итерации было бы:
def digitsequence(a, b):
results = []
while True:
results.append(a % b)
if a < b: break
a //= b
return reversed(results)
, если предположить, что нужно, чтобы последовательность цифр была в «старшем» порядке, к которому мы привыкли, из того, как позиционная десятичная запись вошла в западную культуру (в арабском оригинале это был более естественно вычисляемый порядок с прямым порядком байтов ... но арабский язык, написанный справа налево, буквальная транскрипция этого порядка на европейских языках, написанная слева направо, стала символом прямого порядка!-).
В любом случае, вы можете использовать простую линейную рекурсию как способ неявного «обращения» вещей (вы могли бы сказать, что такая рекурсия «скрывает» стек «последний вошел, первым вышел», что явноспособ перевернуть последовательность ;-), что, я думаю, откуда берется спецификация рекурсии в домашнем задании; -).