Реализация операции приращения для другой базы - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь реализовать операцию приращения к списку целых чисел таким образом, чтобы

  1. Длина списка была N
  2. Каждый элемент целых чисел меньше, чем B. B является основанием операции.
  3. Если я вызываю операцию, она добавляет 1 к последнему элементу списка.
  4. Если значение превышает B, оно переносится на следующий элемент.

Например, если список задан, как показано ниже, с B = 13

list = [0, 0, 0, 5, 12]
increment(list)
print(list) # return [0, 0, 0, 6, 0]

Моя фактическая цель - напечатать весь список от [0,0,0,0,0] до [12 , 12,12,12,12]. И все же у меня возникают трудности с переносом номеров.

1 Ответ

0 голосов
/ 24 апреля 2020

Пример рекурсивного кода

Код

def increment(lst, base):
  if len(lst) == 0:
    return lst

  lst[-1] += 1  # increment right most digit in list

  if lst[-1] >= base:
    # carry forward
    lst[-1] = 0   # reset right most to zero
                  # (1) increment without right most t
                  # (2) then append right most digit
    lst = increment(lst[:-1], base) + lst[-1:]

  return lst

Тест

print('Base 12 example')
lst = [0, 0, 0, 5, 12]
print(lst)
for i in range(10):
  lst = increment(lst, 12)
  print(lst)

print('Base 3 example')
lst = [0, 0, 0]
print(lst)
for i in range(10):
  lst = increment(lst, 3)
  print(lst)

Out

Base 12 example
[0, 0, 0, 5, 12]
[0, 0, 0, 6, 0]
[0, 0, 0, 6, 1]
[0, 0, 0, 6, 2]
[0, 0, 0, 6, 3]
[0, 0, 0, 6, 4]
[0, 0, 0, 6, 5]
[0, 0, 0, 6, 6]
[0, 0, 0, 6, 7]
[0, 0, 0, 6, 8]
[0, 0, 0, 6, 9]
Base 3 example
[0, 0, 0]
[0, 0, 1]
[0, 0, 2]
[0, 1, 0]
[0, 1, 1]
[0, 1, 2]
[0, 2, 0]
[0, 2, 1]
[0, 2, 2]
[1, 0, 0]
[1, 0, 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...