Python代码下面的输出应该是什么?该代码来自在线测验,给出的答案是0

时间:2019-05-08 10:59:22

标签: python function

此代码来自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。

4 个答案:

答案 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的方式进行调用。因此,在这里我们看到该函数实际上是一个递归函数(有关递归函数herehere的更多信息)。 func的第二个参数是添加到ans值的原始函数的x值。这是ans变量的唯一出现,这意味着它实际上对函数本身没有任何意义。
现在,通过使用减小的x值调用函数,它将再次检查该值是否等于0。如果是,它将返回0,这意味着调用此新func函数的func函数也将返回0。否则它将使用减小的func值再次调用x函数。它将执行此操作,直到x的值变为0
这意味着从该函数返回的唯一值是0

因此,简而言之,该函数将只能返回0

为什么不(1,1)

因此,您认为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)这样的元组类型。