在整个递归中,计数器x
保持为1,而不是递增。
我的代码
def square(l):
if len(l) > 0:
x=0
print("square of element ", x+1 , ": ", l[0] ** 2)
square(l[1:])
b = (-2,3,11)
square(b)
输出
元素1的平方:4
元素1的平方:9
元素1的平方:121
有没有办法解决这个问题? 预先感谢
答案 0 :(得分:0)
将功能更改为此:
def square(l, x=0):
if len(l) > 0:
print("square of element ", x+1 , ": ", l[0] ** 2)
x= x+1
square(l[1:], x)
然后:
b = (-2,3,11)
square(b)
结果将是:
square of element 1 : 4
square of element 2 : 9
square of element 3 : 121
答案 1 :(得分:0)
x=0
定义了一个局部变量;即为函数的每个实例提供一个新变量,当递归调用square时,嵌套的被调用函数将创建自己的x
。
一种解决方案是使用全局变量:
x = 0
def square(l):
if len(l) > 0:
global x
x = x+1
print("square of element ", x , ": ", l[0] ** 2)
square(l[1:])
答案 2 :(得分:0)
每次调用函数x时,x=0
下的该行if
都设置为零。您需要更改代码。您可以按照以下过程进行操作:
x = 0
def square(l):
global x
if len(l) > 0:
x += 1
print("square of element ", x, ": ", l[0] ** 2)
square(l[1:])
b = (-2, 3, 11)
square(b)
元素1的平方:4
元素2的平方:9
元素3的平方:121