【问题标题】:Recursion assignment递归赋值
【发布时间】:2018-09-05 23:34:14
【问题描述】:
def swap(aList):

  if len(aList) == 0:
      return 0
  elif len(aList) == 1:
      print(aList[0])
      return aList[0]
  return aList[0] + swap(aList[2:])

aList = [["abcdefgh"]]

swap(aList)

上面的代码打印了,但是它从 a-h 开始按顺序打印 aList。 像这样: "abcdefgh"

我需要每两个字母反向打印一次;像这样: “坏事”

【问题讨论】:

  • @KushalShinde 除了这是一个明确的递归分配,根据帖子的标题。
  • 是的,它是一个递归分配,所以我需要坚持我所拥有的并弄清楚为什么它没有按照我想要的方式打印。我做错了什么?

标签: python list recursion


【解决方案1】:

这是一个非常简单的方法

def swap (l):
  if len (l) < 2:
    return list (l)
  else:
    return [ l[1], l[0] ] + swap (l[2:])

print (swap ("abcdefgh"))
# ['b', 'a', 'd', 'c', 'f', 'e', 'h', 'g']

它也适用于数组

print (swap ([1, 2, 3, 4, 5, 6, 7]))
# [2, 1, 4, 3, 6, 5, 7]

【讨论】:

  • 你可能不应该为他们做 OP 的功课 :)
【解决方案2】:

为什么要使用二维数组?您只是在交换其成员(一维数组)而不是字符串中的字符。只需传入字符串本身 - 索引运算符可以访问每个字符。另外,请记住 + 运算符对于字符串是非可交换的

def swap(s):
   if len(s) == 0:
      return ""
   elif len(s) == 1:
      return s
   return s[1] + s[0] + swap(s[2:])

print(swap("abcdefgh")) # --> badcfehg

【讨论】:

  • 我对编程还是比较陌生。感谢您的洞察力。
【解决方案3】:

每当你遇到递归问题时,你需要问自己两个问题:

  1. 什么是基本情况(最简单的情况)。可以有不止一个。
  2. 如果我不在基本情况下,如何在更接近基本情况的情况下编写一些调用当前函数的代码。

在您的情况下,基本情况似乎是正确的,但您返回的内容对于 len==0 似乎不正确。如果一个字符串的长度为零,你会返回什么?

您的第二个基本案例看起来不错,但您不应该混合打印和返回。只需返回 aList[0],然后您就可以打印出调用交换函数的输出。

对于您的递归情况,只考虑字符串“ab” - 如何让递归调用返回“ba”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2015-02-25
    • 2015-09-12
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多