使用递归函数对嵌套列表求和
函数接口定义:
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 = 0for i in L:if (type(i) != list):total += ielse:total += sumtree(i)return total"""
原因:函数内部的局部变量: total 在 sumtree 函数内部被定义,它是一个局部变量。这意味着它只在函数内部有效,不会影响外部的任何变量。
递归调用: 当函数递归调用自身时,它会创建一个新的局部作用域。因此,每一次递归调用都会创建新的 total 变量,这些变量之间互不影响。
返回值: 递归调用 sumtree(i) 后,它会返回子列表的总和,并且这个返回值会被加到当前函数的 total 上。最终,函数返回最外层 total 的值
"""
方法二:
total = 0def sumtree(L):global total # 声明 total 为全局变量for i in L:if (type(i) != list):total += ielse:sumtree(i)return total
方法三:
def sumtree(L):total = 0for element in L:if isinstance(element, list):total += sumtree(element) # 递归调用else:total += elementreturn total
方法四:
def sumtree(L):total = 0stack = [L] # 创建一个栈来存储待处理的列表while stack:current = stack.pop() # 从栈顶取出一个列表for element in current:if isinstance(element, list):stack.append(element) # 将子列表压入栈else:total += elementreturn total
测试结果:
这里不一一列举了,只列出部分提交结果