【问题标题】:Understanding recursion with the help of Iteration在迭代的帮助下理解递归
【发布时间】:2023-03-05 06:55:01
【问题描述】:
  def unZip(master3):    
       c = len(master3)
       sub1=''
       sub2=''
       for i in range(0,c,2):
           sub1+=master3[i]
           sub2+=master3[i+1]
       print(sub1,",",sub2)

基本上我已经编写了这段代码,将替代字符与字符串分开并分别显示,

我一直在尝试通过递归来转换或理解这一点,但我最近一直失败。

这是我的尝试,谁能告诉我应该如何处理它?

def unzip(a):
    storage1=''
    storage2=''
    storage3=''
    storage4=''
    if len(a)==0:
        return 0
    else:
        if len(a)>=1:
            storage1=a[0::2]
            storage2=a[1::2]
            storage3+=storage1
            storage4+=storage2
            print(storage3,storage4)
            return unzip(a[0]+a[1:])

【问题讨论】:

  • unzip(a[0]+a[1:])。您将整个字符串传递回函数。
  • 感谢 morgan 编辑它,我是第一次来所以我不知道怎么做 :)
  • 没问题,以后,如果你突出显示你的代码并按Ctrl + K,它会正确格式化它。
  • 嗨@Rectifier,欢迎来到SO。请查阅asking a good question 帮助页面了解如何改进您的问题。例如,请务必准确填写您遇到的问题/错误。
  • 字符串不是在召回中被切分了吗? ://

标签: python recursion iteration


【解决方案1】:

而不是使用切片来确定你的字符串,你应该一次从你的字符串中取出一个字符,然后像这样调用你的递归函数

def unzip(s, a, b='', c=''):
    if len(a) == 0:
        return b + ', ' + c
    if s%2 == 0:
        b += a[0]
    else:
        c += a[0]
    return unzip(s+1, a[1:], b, c)

print unzip(0, 'HelloWorld')

Hlool, elWrd

它的作用是它以字符串a 开头,并在添加到bc 之间交替使用变量s,具体取决于它是偶数还是奇数。将a 的第一个字母添加到bc,然后从a 中删除该字母。然后再次调用该函数,但使用s+1。如果a 的长度为零,则返回bc,然后打印您的结果

要获得与您所拥有的相同的结果,您可以将您的结果简化为

a = 'HelloWorld'
storage1=a[0::2]
storage2=a[1::2]

print(storage1,storage2)

('Hlool', 'elWrd')

切片负责获取a 中的所有其他字母,然后您可以打印它。您现在设置它的方式将继续通过a 并成为无限循环,因为a 的大小永远不会改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2023-03-19
    • 2014-02-16
    • 1970-01-01
    • 2020-07-04
    • 2016-11-15
    • 2021-11-29
    相关资源
    最近更新 更多