递归赋值

时间:2018-03-27 13:58:06

标签: python list recursion

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"

我需要反向打印每两个字母;喜欢这样: " badcfehg"

3 个答案:

答案 0 :(得分:2)

为什么要使用2D数组?您只是交换其成员(1D数组)而不是字符串中的字符。只需传入字符串本身 - 索引操作符就可以访问每个字符。另外,请记住+运算符非交换表示字符串:

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

答案 1 :(得分:0)

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

  1. 什么是基本情况(最简单的情况)。可以有不止一个。
  2. 如果我不在基本情况下,如何在更接近基本情况的情况下编写一些调用当前函数的代码。
  3. 在你的情况下,基本情况似乎是正确的,但你返回的内容似乎对len == 0不正确。如果一个字符串的长度为零,你将返回什么?

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

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

答案 2 :(得分:0)

这是一个非常简单的方法

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]