使用递归函数对嵌套列表求和
函数接口定义:
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
测试结果:
这里不一一列举了,只列出部分提交结果