2016-11-14 4 views
8

मेरा पैरामीटर, n एक पूर्णांक के रूप में एक फ़ोन नंबर है।एक पूर्णांक के तत्वों को रिकर्सली

रिकर्सन का उपयोग करके मैं पूर्णांक में पहले तीन नंबरों को वापस करना चाहता हूं।

मैंने पूर्णांक वर्णों की सूची में पूर्णांक को बदल दिया है और मैं आखिरी संख्या को बार-बार छोड़ने का प्रयास कर रहा हूं जब तक कि मैं पिछले तीन के साथ नहीं छोड़ा जाता, लेकिन मैं दोहराने के तरीके पर अटक गया हूं यह।

def areaCodes(n): 
    n = str(n) 
    n = list(n) 
    del n[-1] 
    #n = reduce(opperator.add, n) 
    n = ''.join(n) 
    n = int(n) 
    return n 

मैं जानता हूँ कि मैं किसी भी तरह बदले में नाम दोहराने की अपेक्षा की जाती रही है, लेकिन क्योंकि n एक पूर्णांक है कि मैं दोहराने के लिए उपयोग कर सकते हैं नहीं है। मैं क्या करूं?

+0

क्या आप रिकर्सन का उपयोग करना चाहिए? –

+0

आकार के तीनों ओर फिर से होने के लिए थोड़ी देर लूप का उपयोग करें – MichaelMMeskhi

उत्तर

0
import sys 

def areaCodes(n): 
#Create a list 
myList = list(str(n)) 
#Delete last element 
del myList[-1] 
#Combine your elements into string list 
myListStr = ''.join(myList) 
#Type cast to int 
myListInt = int(myListSte) 

#Check whether your list satisfies your condition 
if len(myList) > 3: 
    #Recusivley call the function again 
    return areaCodes(myListInt) 

#Return your list when recursion completes  
return myListInt 


n = 12345 
print areaCodes(n) 
+0

लूप में 'len (n)> 3' की स्थिति होनी चाहिए अन्यथा यह '3' से कम इनपुट दिए जाने पर एक अनंत लूप में समाप्त हो जाएगा। –

+0

मेरा बुरा इसे ठीक करेगा – MichaelMMeskhi

+0

यह रिकर्सिव कैसे है? –

1

मुझे लगता है कि यह एक अभ्यास है जहां रिकर्सन आवश्यक है। यदि हां, तो इस कोशिश (वहाँ बेहतर तरीके अपने अंतिम लक्ष्य को पूरा करने के हैं, लेकिन मैं यथासंभव कम अपने मौजूदा कोड को संशोधित करने की कोशिश की):

def areaCodes(n): 
    n_lst = list(str(n)) 
    del n_lst[-1] 
    n_str = ''.join(n_lst) 
    n_int = int(n_str) 
    if len(n_lst) > 3: 
     return areaCodes(n_int) 
    return n_int 

यह फिर से समारोह कॉल करेंगे अगर संख्या की लंबाई है तीन से अधिक, और अन्यथा नंबर वापस लौटें। मूल रूप से, केवल एक भाग आप अपने मूल समारोह में लापता थे, निम्नलिखित था जो पुनरावर्ती हिस्सा है:

if len(n_lst) > 3: 
    return areaCodes(n_int) 
2

कैसे कुछ इस तरह के बारे में?

def areaCodes(n): 
    # if n is less than 1000, what does it mean about the number of digits? 
    if n < 1000: 
    return # fill... 

    # otherwise, if n is greater than 1000, how can we alter n to remove the last 
    # digit? (hint: there's an operation similar to division called f...r division) 
    return areaCodes(# operate on n somehow...) 
1

याद रखें कि एक समारोह के लिए पुनरावर्ती होने के लिए, यह दो मुख्य विशेषताओं होगा: कुछ बिंदु कॉल ही पर

  1. यह होगा। (यह वही है जो इसे 'दोहराना' बनाता है)
  2. इसमें स्टॉपिंग स्थिति (या बेस केस) होगी।

आपने # 1 का उल्लेख किया जब आपने लिखा था कि आपको "वापसी में नाम" का उपयोग करना है, तो यह बहुत अच्छा है! आपको बस इसे अपने कोड में लिखने की जरूरत है:

return areaCodes(n), जहां n अपडेट किए गए फ़ोन नंबर को हटा दिया गया है।

जैसा कि आप देख सकते हैं, प्रत्येक रिकर्सिव कॉल को समाधान के प्रति कुछ काम करना चाहिए, और अगले मिनी-समाधान को अगले रिकर्सिव कॉल में पास करना चाहिए।

उपरोक्त # 2 के साथ, आपको आधार केस निर्दिष्ट करने की आवश्यकता है, जहां रिकर्सन समाप्त हो जाएगा। इसलिए, जब भी आप अपना फ़ंक्शन कॉल करते हैं तो आप एक अंक निकाल रहे हैं, इसलिए आपको यह देखने के लिए किसी प्रकार का चेक शामिल करना चाहिए कि वर्तमान इनपुट वह लंबाई है जिसे आप अभी तक चाहते हैं।

यदि यह सही लंबाई है, आप कर चुके हैं, और आपको वर्तमान नंबर (एक और रिकर्सिव कॉल नहीं) वापस करना चाहिए।

अन्यथा, आप अभी तक रिकर्सन के साथ नहीं किए गए हैं।

संबंधित मुद्दे