Как распечатать список по вертикали с помощью рекурсии?

#python #python-3.x #recursion #reduction

#python #python-3.x #рекурсия #сокращение

Вопрос:

Я хочу напечатать этот список по вертикали рекурсивно: Пример:

 print_list(['hi', [22,45], 'dog', 21])
  

Ожидаемый:

 hi
[22, 45]
dog
21
  

Вот мой код:

 def print_list(n_list):
    if len(n_list) == 0:
            return
    else:
        half = len(n_list) // 2
        for i in range(half):
            if half == 2:
                print (n_list[i], sep = "n")
        else:
            print (n_list[half i])
  

Вот что я получаю:

 hi
[22, 45]
dog
  

Я не уверен, почему список не печатается полностью. Это также происходит для списков с большим количеством элементов, отображается только часть. Я знаю, что что-то путаю в инструкции print, но не могу понять это…

Комментарии:

1. Это вопрос домашнего задания, не так ли?

2. Naansense HW, да.

Ответ №1:

 n_list = ['hi', [22,45], 'dog', 21]
print(*n_list, sep='n')
  

дает

 hi
[22, 45]
dog
21
  

Ответ №2:

Вы близки, но не применяете сокращение, поскольку ваша функция не вызывает саму себя. Это слегка измененная версия вашего кода, которая должна работать:

 def print_list(n_list):
  if len(n_list) == 0:
    return
  else:
    half = (len(n_list)   1) // 2

    # Print elements in the first half:
    for i in range(half):
      print(n_list[i])

    # Print second half using recursion:
    print_list(n_list[half:])
  

Комментарии:

1. это то, что я искал! Большое вам спасибо!

Ответ №3:

Разве эта функция не дает желаемый результат?

 def print_list(n_list):
    for item in n_list:
        print(item)

  

Я не уверен, почему именно вы пытаетесь перебрать только половину списка half = len(n_list) // 2 ?

Комментарии:

1. и вам не нужно str .

2. это так… Однако я должен решить это с помощью метода сокращения, в этом суть.

3. @CasperNe похоже, ваш вопрос не совсем ясен. Отсутствуют элементы, потому что вы делите диапазон на два. Что вы подразумеваете под методом сокращения? В вашем вопросе это нигде не указано.

4. @CasperNe Для сокращения вам понадобится рекурсивная функция. У вас нет рекурсии нигде в вашем коде.

5. @CasperNe так отредактируйте свой пост, чтобы на самом деле объяснить свой вопрос и ограничения.