此代码来自Python在线测验。网站上的答案为0。我不理解测验中给出的答案。根据我的理解,答案应该是(1,1)。
def func(x, ans):
if(x==0):
return 0
else:
return func(x-1, x+ans)
print(func(2,0))
我希望print(func(2,0))的输出为(1,1),但是给出的答案是0。
答案 0 :(得分:1)
迭代0: x = 2,ans = 0; 现在转到'else'语句,x = 1,ans = 2。
迭代1: x = 1,ans = 1; 转到'else'语句,现在,x = 0,ans = 3。
迭代2: x = 0,ans = 3; 转到“ if”语句,从提供输出“ 0”的函数返回
答案 1 :(得分:0)
return 0
使func
始终返回0
。
另外,此函数无法返回(1,1)
,其返回类型为数字
下面的代码怎么样?
def func(x, ans):
print(x, ans)
if(x==0):
return ans # updated
else:
return func(x-1, x+ans)
print(func(2,0))
# output: 3
或
def func(x, ans):
print(x, ans)
if(x==0):
return 0
else:
return (x-1, x+ans) #updated
print(func(2,0))
#Output: (1, 2)
答案 2 :(得分:0)
一种跟踪发生情况的方法是在函数定义中添加几个print
语句-
def func(x, ans):
print(f"x is:\t {x}")
print(f"ans is:\t {ans}")
if(x==0):
return 0
else:
return func(x-1, x+ans)
然后运行功能print(func(2,0))
,看看打印出了什么值
答案 3 :(得分:0)
如果您想知道某些代码是如何工作的,一个好的做法是仅逐行进行检查。因此,使用此功能将是:
首先,该函数检查其输入x
是否等于0
。如果是,它将返回0
,并且通过返回它也意味着该函数已完成。
if(x==0):
return 0
如果x
不等于0
,则if语句将返回False
,从而使函数移至下一行:
else:
return func(x-1, x+ans)
在此函数以x
的值减小1
的方式进行调用。因此,在这里我们看到该函数实际上是一个递归函数(有关递归函数here和here的更多信息)。 func
的第二个参数是添加到ans
值的原始函数的x
值。这是ans
变量的唯一出现,这意味着它实际上对函数本身没有任何意义。
现在,通过使用减小的x
值调用函数,它将再次检查该值是否等于0
。如果是,它将返回0
,这意味着调用此新func
函数的func
函数也将返回0
。否则它将使用减小的func
值再次调用x
函数。它将执行此操作,直到x
的值变为0
。
这意味着从该函数返回的唯一值是0
。
因此,简而言之,该函数将只能返回0
。
因此,您认为func
的返回值为(1,1)
。如果您不知道函数的功能,那么我认为我理解您为什么会发生这种情况。我想在函数的返回语句中使用以下参数:
(x-1, x+ans)
x
将减少1,使其变为1
(当输入为(2, 0)
时),因为2 - 1 = 1
。然后在x
中使用该x+ans
值,得到1 + 0 = 1
。结果返回值为(1,1)
。
但是就像说的那样,这是不正确的。值不是以这种方式计算的,它们只是给函数的参数,因此它可以在内部进行处理。
另外,就像所说的,该函数将仅返回0
,它是一个整数。这样就不可能返回像(1,1)
这样的元组类型。