2009-06-04 6 views
6

में रिकर्सिव फ़ंक्शन पालिंड्रोम मुझे एक रिकर्सिव फ़ंक्शन लिखने में सहायता चाहिए जो यह पता लगाती है कि स्ट्रिंग एक पालिंड्रोम है या नहीं। लेकिन मैं किसी भी लूप का उपयोग नहीं कर सकता, यह रिकर्सिव होना चाहिए। क्या कोई मुझे यह दिखाने में मदद कर सकता है कि यह कैसे किया जाता है। मुझे इसे आगामी मध्यवर्ती के लिए सीखना होगा। मैं पायथन का उपयोग कर रहा हूँ।पाइथन

1) 0 आइटम शेष:

उत्तर

39

एक सामान्य एल्गोरिथ्म दृष्टिकोण से, पुनरावर्ती क्रिया 3 मामलों है। आइटम पहचान के अनुसार palindrome है।

2) 1 आइटम छोड़ दिया गया। आइटम पहचान के अनुसार palindrome है।

3) 2 या अधिक आइटम। पहले और अंतिम आइटम को हटा दें। की तुलना करें। यदि वे वही हैं, तो स्ट्रिंग के बाईं ओर क्या कार्य करें। यदि पहले और आखिरी समान नहीं हैं, तो आइटम palindrome नहीं है।

समारोह खुद के कार्यान्वयन पाठक :)

3

एक स्ट्रिंग है करने के लिए एक व्यायाम के रूप में छोड़ दिया जाता है शून्य या एक वर्ण लंबी, यह विलोमपद है।

यदि किसी स्ट्रिंग में पहले और आखिरी अक्षर समान होते हैं, और शेष अक्षरों (मुझे लगता है कि यह पाइथन में [1: -1] स्लाइस है, लेकिन मेरा पायथन थोड़ी जंगली है) यह एक पालिंड्रोम है, यह एक पालिंड्रोम है।

अब, इसे एक पैंडिंड्रोम फ़ंक्शन के रूप में लिखें जो एक स्ट्रिंग लेता है। यह खुद को बुलाएगा।

2

यहाँ एक और दृष्टिकोण है

एक मुरजबंध संबंधी स्ट्रिंग

  1. कुछ पत्र, एक्स है।

  2. कुछ palindromic substrinng।

  3. वही पत्र, x, दोहराया गया।

इसके अलावा, ध्यान दें कि आपको उचित अंग्रेजी वाक्य दिया जा सकता है "सक्षम था मैं एल्बा को देखा था।" विराम चिह्न के साथ। आपके पैलिंड्रोम चेकर को चुपचाप विराम चिह्न छोड़ना पड़ सकता है। इसके अलावा, आपको मामले पर विचार किए बिना चुपचाप मिलान करना पड़ सकता है। यह थोड़ा और जटिल है।

  1. कुछ प्रमुख विराम चिह्न। कुछ पत्र, x

  2. कुछ पैलिंड्रोमिक सबस्ट्रिंग।

  3. कुछ पत्र, x, मामले के संबंध में दोहराया गया। कुछ पीछे विराम चिह्न।

और, परिभाषा के अनुसार, शून्य-लंबाई वाली स्ट्रिंग एक पालिंड्रोम है। इसके अलावा एक सिंगल-अक्षर स्ट्रिंग (विराम चिह्न हटाने के बाद) एक पालिंड्रोम है।

1

फ़ंक्शन को स्ट्रिंग की अपेक्षा करनी चाहिए। यदि और भी है तो स्ट्रिंग में एक अक्षर पहले और अंतिम अक्षर की तुलना करता है। यदि 1 या 0 अक्षर, सत्य वापस आते हैं। यदि दो अक्षर बराबर हैं तो फ़ंक्शन को फिर से पहले और अंतिम अक्षर के बिना स्ट्रिंग के साथ कॉल करें। अगर वे बराबर वापसी के बराबर नहीं हैं।

palindrom(word): 
    IF length of word 1 or 0 THEN 
     return 0; 
    IF last and first letter equal THEN 
    word := remove first and last letter of word; 
    palindrom(word); 
    ELSE 
    return false; 
1

यहां एक आसान तरीका है कि आप सरल रिकर्सिव फ़ंक्शंस के बारे में सोच सकते हैं ... समस्या के चारों ओर फ़्लिप करें और इस तरह से इसके बारे में सोचें। आप फिर से पैलिंड्रोम कैसे बनाते हैं? यहाँ कैसे मैं इसे करना होगा है ...

def make_palindrome(): 
    maybe: 
     return "" 
    elsemaybe: 
     return some_char() 
    else: 
     c = some_char() 
     return c + make_palindrome() + c 

तो फिर तुम उसके चारों ओर फ्लिप परीक्षण का निर्माण कर सकते हैं।

40
def ispalindrome(word): 
    if len(word) < 2: return True 
    if word[0] != word[-1]: return False 
    return ispalindrome(word[1:-1]) 

और यहाँ यहाँ सबसे अच्छा एक लाइनर

def ispalindrome(word): 
    return word == word[::-1] 
2

हम कोड पोस्ट कर रहे हैं के बाद से वैसे भी है, और कोई एक लाइनर अभी तक नियुक्त किया गया है, चला जाता है:

def palindrome(s): 
    return len(s) < 2 or s[0] == s[-1] and palindrome(s[1:-1]) 
+1

-1: पोस्ट करना किसी के होमवर्क के लिए कोड - शर्म की बात है तुम पर। –

+2

यदि मैं वास्तविक होमवर्क था, तो मैं आपसे सहमत हूं, लेकिन ऐसा नहीं है। प्रश्नकर्ता मध्यस्थ के लिए सीख रहा है। इसे समझने की कोशिश करने के बजाए इस उत्तर को याद रखना, उसकी मदद नहीं करेगा: निश्चित रूप से परीक्षा में उसे एक अलग रिकर्सिव समस्या को हल करने की आवश्यकता होगी। – Stephan202

-1
n=raw_input("Enter a number===>") 
n=str(n) 
l=len(n) 
s="" 
for i in range(1,l+1): 
    s=s+n[l-i] 
if s==n: 
    print "Given number is polindrom" 
else: 
    print "Given number is not polindrom" 
1
a=raw_input("enter the string:") 
b=len(a) 
c=0 
for i in range(b): 
    if a[i]==a[-(i+1)]: 
     c=c+1 
if c==b: 
    print a,"is polindrome" 
else: 
    print a,"is not polindrome" 
+1

यह उत्कृष्ट – victor

+1

है मैं नहीं देख सकता कि यह कितना रिकर्सिव है। – billwild

+5

@ बिलविल्ड यह लगभग 0% रिकर्सिव है। – Thomas

0

मेरा समाधान

#To solve this I'm using the stride notation within a slice [::] 
def amazonPalindrome(input): 
    inputB = input 
    input = input[::-1] 
    #print input 
    noPalindrome = inputB + " is not a palindrome" 
    isPalindrome = inputB + " is a palindrome" 
    #compare the value of the reversed string to input string 
    if input[0]!= input[-1]: 
     print noPalindrome 
    else: 
     print isPalindrome 


#invoking the def requires at least 1 value or else it fails 
#tests include splitting the string,mixing integers, odd amount palindromes. 
#call the def 
amazonPalindrome('yayay') 
-2

यहां सी संस्करण है, यदि कोई यहां सी कोड की तलाश में भूमि पर होता है!

int IsPalindrome_Recursive(char *s, int start, int end) 
{ 
    if ((end - start) < 2) 
    { 
     return 1; 
    } 
    if (s[start] != s[end]) 
    { 
     return 0; 
    } 
    return IsPalindrome_Recursive(s, ++start, --end); 
} 

कॉल के रूप में:

IsPalindrome_Recursive(s, 0, strlen(s) - 1)