引用代码:https://blog.csdn.net/qq_35061334/article/details/117338687 我在条件里加了print()感觉容易理解多了,希望也能帮到其他学习者!

def func():
    while True:
        try:
            n = int(input())
            trains = input().strip().split(' ')
              
            res = []
            def rec_trains(cur_idx, in_trains, out_trains):
                # 如果原始火车列表的最后一个元素已经进站,此时只能出站,将入站列表中的火车倒序加入出站火车中
                if trains[-1] in in_trains:
                    res.append(' '.join(out_trains + in_trains[::-1])); print(*in_trains[::-1],'出站');print('出站顺序:',res[-1]) 
                    #return
                # 如果进站列表为空,此时只能进站,进站列表加上当前火车,出站列表不变
                elif in_trains == []:
                    print(trains[cur_idx],'进站');rec_trains(cur_idx + 1, in_trains + [trains[cur_idx]], out_trains)
                # 否则,就既有可能进站也有可能出站
                else:
                    # 出站,当前火车索引不变,进站火车列表减去最后一个元素,出站列表加上进站列表刚刚出站的火车
                    print('选A:', in_trains[-1],'出站');rec_trains(cur_idx, in_trains[:-1], out_trains + [in_trains[-1]]) 
                    # 进站,当前火车索引加1,进站列表加上当前火车,出站列表不变
                    print('选B:',trains[cur_idx],'进站');rec_trains(cur_idx + 1, in_trains + [trains[cur_idx]], out_trains)
                    ## 递归“遍历”本质:利用def下if条件句特点;如果有两个选项会一直循环至验证所有可能解
                    
            rec_trains(0, [], [])
            res.sort()
            #print('\n'.join(res))
        except:
            break
if __name__ == '__main__':
    func()