PTA - 嵌套列表求和

使用递归函数对嵌套列表求和

函数接口定义:

def sumtree(L)

L是输入的嵌套列表。

裁判测试程序样例:

/* 请在这里填写答案 */

L = eval(input())
print(sumtree(L))  # 调用函数

输入样例:

在这里给出一组输入。例如:

[1,[2,[3,4],5],6,[7,8]]

输出样例:

在这里给出相应的输出。例如:

36

我的答案:

方法一:
def sumtree(L):
    #global total        #为什么这里不用global也可以输出正确答案?
    total = 0
    
    for i in L:
        if (type(i) != list):
            total += i
        else:
            total += sumtree(i)
            
    return total

"""
原因:

函数内部的局部变量: total 在 sumtree 函数内部被定义,它是一个局部变量。这意味着它只在函数内部有效,不会影响外部的任何变量。
递归调用: 当函数递归调用自身时,它会创建一个新的局部作用域。因此,每一次递归调用都会创建新的 total 变量,这些变量之间互不影响。
返回值: 递归调用 sumtree(i) 后,它会返回子列表的总和,并且这个返回值会被加到当前函数的 total 上。最终,函数返回最外层 total 的值
"""

 

方法二:
total = 0

def sumtree(L):
    global total  # 声明 total 为全局变量
    for i in L:
        if (type(i) != list):
            total += i
        else:
            sumtree(i)
    return total

 

方法三:
def sumtree(L):
    total = 0
    for element in L:
        if isinstance(element, list):
            total += sumtree(element)  # 递归调用
        else:
            total += element
    return total

 

方法四:
def sumtree(L):
    total = 0
    stack = [L]  # 创建一个栈来存储待处理的列表
    while stack:
        current = stack.pop()  # 从栈顶取出一个列表
        for element in current:
            if isinstance(element, list):
                stack.append(element)  # 将子列表压入栈
            else:
                total += element
    return total

测试结果:

这里不一一列举了,只列出部分提交结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值