递归 - Python - 为什么 print(Foo) 显示的内容与

为什么 print(foo) 显示的内容与 print(functionreturningthesame()) 不同


查看输出,在函数中打印数组显示正确答案,但打印函数的返回值没有。我可能对递归迭代感到困惑......


def AreNotOpposite(a,b):

  if a == "NORTH" and b == "SOUTH":

    return False

  if a == "SOUTH" and b == "NORTH":

    return False

  if a == "WEST" and b == "EAST":

    return False

  if a == "EAST" and b == "WEST":

    return False

  return True


def canBeBetter(arr):

  for i in range(len(arr)-1):

    if not AreNotOpposite(arr[i],arr[i+1]):

      return True

  return False


def dirReduc(arr):

  re = []

  avoid = -1

  for i in range(len(arr)):

    if avoid == i:

      continue

    if i+1 == len(arr):

      re.append(arr[i])

    elif AreNotOpposite(arr[i],arr[i+1]):

      re.append(arr[i])

    else: #do not append neither the nextone

      avoid = i+1

  if canBeBetter(re):  #can reduce more?

    dirReduc(re)

  else:

    print(re)

    return re


print (dirReduc(['NORTH', 'WEST', 'EAST','SOUTH', 'NORTH','SOUTH','EAST','NORTH']))

输出:


['EAST', 'NORTH']

None


哔哔one
浏览 103回答 3
3回答

慕姐4208626

我想你想要这样的东西  if canBeBetter(re):  #can reduce more?    return dirReduc(re)  else:    return re

米脂

您需要返回递归调用的结果(否则您的函数将到达逻辑末尾并简单地 return None):if canBeBetter(re):  #can reduce more?  return dirReduc(re)else:  print(re)  return re
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python