首页 > 解决方案 > 递归调用时,我的列表不会自行清除

问题描述

我刚开始学习 Python,并在观看了 Veritasium 在 YouTube 上的视频,标题为“无人能解决的最简单的数学问题”后想尝试一下

本质上:
如果 x 是偶数,将 x 除以 2
如果 x 是奇数,乘以 3 然后加 1
不断重复直到 x = 1

所以我写了这段代码来获取一系列数字的结果列表

val = int(input("Enter a Number"))

def threexplus1(x, count = 1, mylist=[]):
    if x == 1: 
        mylist.append(x)
        return count, mylist
    elif x%2==0:
        mylist.append(x)
        return threexplus1(int(x/2), count+1)
    else:
        mylist.append(x)
        return threexplus1(int(x*3+1), count+1)

for x in range (1,val+1):
    print (x)
    print (threexplus1(x))

输入

4

我想要的输出不是我希望的输出

当前输出:

Enter a Number  4
1
(1, [1])
2
(2, [1, 2, 1])
3
(8, [1, 2, 1, 3, 10, 5, 16, 8, 4, 2, 1])
4
(3, [1, 2, 1, 3, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1])

我想要的输出:

Enter a Number  4
1
(1, [1])
2
(2, [2, 1])
3
(8, [3, 10, 5, 16, 8, 4, 2, 1])
4
(3, [4, 2, 1])

我想知道为什么 mylist 在递归调用时不会刷新/清除自身?

标签: pythonrecursion

解决方案


推荐阅读