Я думаю, вы просто хотите преобразовать цикл for в рекурсии. Если это так, сначала
, добавьте проверку, чтобы убедиться, что l
пусто, а если пусто, верните пустой словарь.
if not l:
return {}
Теперь сделайте то, что уже сделано
if res is None and pos is None:
res = {}
pos = 1
Теперь вручную получите первый элемент в l
и сохраните в i
.
i = l[0]
Затем скопируйте из исходной программы
if not type(i) == list:
res[i] = res.get(i, 0) + pos
else:
cnt_same(i, pos, res)
Теперьрекурсивный вызов со всеми элементами l
, кроме первого, который уже обработан.
cnt_same(l[1:], pos, res)
И, наконец, возврат res
.
return res
Итак, последнеебудет что-то вроде
def cnt_same(l: list, pos=None, res=None) -> dict:
if not l:
return {}
if res is None and pos is None:
res = {}
pos = 1
i = l[0]
if not type(i) == list:
res[i] = res.get(i, 0) + pos
else:
cnt_same(i, pos, res)
cnt_same(l[1:], pos, res)
return res