python递归中append只生效了一次是为什么


n=int(input("输入n"))

i=0
j=2
def funlist(n):
    global i
    a=[4]

    if i==9:
        print("an=",a[-1])
        return n
    s=a[-1]*3+2*j-1
    print(s)
    a.append(s)
    print("added=",a)
    i=i+1

    print("ai=",a[-1])
    print("i=", i)
    n=n+1
    funlist(n)

funlist(n)

我想通过递归实现第12行的算法并将每次的结果存储到列表a中,可是程序只使用append记录了第一次计算的结果后就不再记录了导致列表里只有两个元素

img

因为你递归调用的时候一直会把a初始化为a=[4]啊,所以只有两个元素,把a的定义放到外面就行了:


n=int(input("输入n"))
i=0
j=2
a=[4]
def funlist(n):
    global i
    
    if i==9:
        print("an=",a[-1])
        return n
    s=a[-1]*3+2*j-1
    print(s)
    a.append(s)
    print("added=",a)
    i=i+1
    print("ai=",a[-1])
    print("i=", i)
    n=n+1
    funlist(n)
funlist(n)


把a改成全局变量试试