Как можно реализовать цикл в Python, который возвращает индексы ветвей дерева и где количество ветвей дерева на глубину слоя увеличивается на глубину слоя в степени n? n и глубина слоя должны быть целыми числами.
Например. для n=2, и это дало бы для первых трех слоев следующее количество ветвей дерева (индексы указаны в черных прямоугольниках):
Глубина слоя 0: 2**0=1
Глубина слоя 1: 2**1=2
Глубина слоя 2: 2**2=4
Например. для n=3, и это дало бы для первых трех слоев следующее количество ветвей дерева (индексы указаны в черных прямоугольниках):
Глубина слоя 0: 3**0=1
Глубина слоя 1: 3**1=3
Глубина слоя 2: 3**2=9
Я думаю, что следующий генератор производит то, что показывают ваши изображения:
def branching(n, depth):
yield '1'
if depth >= 1:
branches = []
for i in range(1, n + 1):
branches.append(f'1.{i}')
yield branches[-1]
for layer in range(2, depth + 1):
branches_new = []
for branch in branches:
for i in range(1, n**(layer - 1) + 1):
branches_new.append(f'{branch}.{i}')
yield branches_new[-1]
branches = branches_new
Этот
for branch in branching(2, 3):
print(branch)
производит
1
1.1
1.2
1.1.1
1.1.2
1.2.1
1.2.2
1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.4
1.1.2.1
1.1.2.2
1.1.2.3
1.1.2.4
1.2.1.1
1.2.1.2
1.2.1.3
1.2.1.4
1.2.2.1
1.2.2.2
1.2.2.3
1.2.2.4
и это для branching(3, 3)
результат выглядит так
1
1.1
1.2
1.3
1.1.1
1.1.2
1.1.3
1.2.1
1.2.2
1.2.3
1.3.1
1.3.2
1.3.3
1.1.1.1
1.1.1.2
1.1.1.3
1.1.1.4
1.1.1.5
1.1.1.6
1.1.1.7
1.1.1.8
1.1.1.9
...
1.3.3.1
1.3.3.2
1.3.3.3
1.3.3.4
1.3.3.5
1.3.3.6
1.3.3.7
1.3.3.8
1.3.3.9
Но у меня сложилось впечатление, что ваше шаблонное описание не совсем соответствует изображениям?
Большое спасибо за вашу поддержку! Как-то я боролся с этим :) ... и извините за формальное описание ... здесь не наивный спекер ;)
Здравствуйте, к сожалению, ваши изображения не соответствуют тому, что вы говорите. В зависимости от того, как должно увеличиваться количество ветвей (
depth**layer
), на первом изображении, например. вы ожидаете2**3 = 8
ветвей всего в третьем слое. Но на изображении их 16. Так что либо изображение неправильное, либо формула. Интуитивно было бы более разумно, если бы формулаdepth**layer
давала вам количество ветвей на ветвь, а не общее количество ветвей на слой. Я предполагаю, что первое - это то, что вы на самом деле имеете в виду.