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)

उपरोक्त कोड प्रिंट करता है, लेकिन यह एलिस्ट को ए-एच से क्रम में प्रिंट करता है। LIKE SO: "abcdefgh"

मुझे हर दो अक्षरों को उल्टा प्रिंट करना है; LIKE SO: "badcfehg"

0
zach_93 27 मार्च 2018, 16:58

3 जवाब

सबसे बढ़िया उत्तर

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
2
meowgoesthedog 27 मार्च 2018, 17:18

यहाँ एक बहुत ही सरल तरीका है

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]
0
Thank you 27 मार्च 2018, 17:34

जब भी आपको पुनरावर्ती समस्या हो, तो आपको अपने आप से दो प्रश्न पूछने होंगे:

  1. आधार मामला क्या है (सबसे सरल संभव मामला)। एक से अधिक हो सकते हैं।
  2. अगर मैं मूल मामले में नहीं हूं, तो मैं कुछ कोड कैसे लिख सकता हूं जो मौजूदा फ़ंक्शन को बेस केस के करीब मामले में कॉल करता है।

आपके मामले में, मूल मामला सही प्रतीत होता है, लेकिन आप जो लौट रहे हैं वह लेन == 0 के लिए सही नहीं लगता है। यदि एक स्ट्रिंग की लंबाई शून्य है, तो आप क्या लौटाएंगे?

आपका दूसरा बेस केस ठीक दिखता है, लेकिन आपको प्रिंटिंग और रिटर्निंग को मिक्स नहीं करना चाहिए। बस aList [0] लौटाएं, और फिर आप अपने स्वैप फ़ंक्शन को कॉल करने से आउटपुट प्रिंट कर सकते हैं।

अपने पुनरावर्ती मामले के लिए, केवल "ab" स्ट्रिंग के बारे में सोचें - आप "ba" वापस करने के लिए पुनरावर्ती कॉल कैसे प्राप्त करते हैं।

0
Arya 27 मार्च 2018, 17:17