文字列が回文かどうかを検出する再帰関数を書くのに助けが必要です。しかし、私は再帰的でなければならないループを使用することはできません。誰でもこれがどのように行われているかを教えてもらえますか?私は次の中間期にこれを学ぶ必要があります。私はPythonを使用しています。 0商品を左Pythonの再帰関数回文簿
1):一般的なアルゴリズムの観点から
文字列が回文かどうかを検出する再帰関数を書くのに助けが必要です。しかし、私は再帰的でなければならないループを使用することはできません。誰でもこれがどのように行われているかを教えてもらえますか?私は次の中間期にこれを学ぶ必要があります。私はPythonを使用しています。 0商品を左Pythonの再帰関数回文簿
1):一般的なアルゴリズムの観点から
は、再帰関数は、3つのケースを有しています。項目は同一性によってpalindromeです。
2)1アイテム左。項目は同一性によってpalindromeです。
3)2以上の項目。最初と最後の項目を削除します。比較する。それらが同じ場合は、文字列の左にある関数を呼び出します。最初と最後が同じでない場合、項目はpalindromeではありません。
関数自体の実装は、読者への課題として残されている:)
文字列が長く、ゼロまたは1つの文字である場合、それは回文です。
文字列の最初と最後の文字が同じで残りの文字が(私はPythonの[1: -1]
スライスだと思うが、Pythonは少し錆びていると思うが)回文は、回文です。
今、文字列を取る回文関数として書いてください。それはそれ自身を呼ぶでしょう。ここで
はパリンドローム文字列が
いくつかの手紙、Xある別の観点
です。
いくつかのパリンドロームサブリジン。
同じ文字、xが繰り返されます。
また、適切な英語の文章「Able was I ere was Elba」が表示される場合があります。句読点付き。あなたのpalindromeチェッカーは、静かに句読点をスキップする必要があります。また、大文字と小文字を区別せずに静かに一致させる必要があるかもしれません。これはやや複雑です。
先頭の句読点。いくつかの手紙、x。
一部のパリンドローム部分文字列。
一部の文字は、xです。大文字と小文字は区別されません。いくつかの末尾の句読点。
そして、定義上、長さゼロのストリングはパリンドロームである。また、一文字の文字列(句読点を削除した後)は回文です。
この関数では文字列が必要です。文字列に複数の文字がある場合は、最初の文字と最後の文字を比較します。 1文字または0文字の場合はtrueを返します。 2つの文字が等しければ、関数を最初の文字と最後の文字のない文字列で再度呼び出します。一致しない場合はfalseを返します。
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;
ここでは、単純な再帰関数を考えることができます。問題を回避して、そのように考えることができます。どのように再帰的に回文を作るのですか?ここで私はそれを行う方法です...
def make_palindrome():
maybe:
return ""
elsemaybe:
return some_char()
else:
c = some_char()
return c + make_palindrome() + c
次に、テストをビルドするためにそれを反転することができます。
def ispalindrome(word):
if len(word) < 2: return True
if word[0] != word[-1]: return False
return ispalindrome(word[1:-1])
そして、ここで私たちはとにかくコードを投稿している、と誰-ライナーはまだ投稿されていないので、最高の1ライナー
def ispalindrome(word):
return word == word[::-1]
あり、ここに行く:
def palindrome(s):
return len(s) < 2 or s[0] == s[-1] and palindrome(s[1:-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"
私のソリューション
#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')
誰もがここでCコードを検索した場合、ここはCバージョンです!
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)
-1:誰かの宿題のためのコードを投稿する - あなたに恥を。 –
これが実際の宿題だったら私はあなたに同意しますが、そうではありません。質問者は中途半端な学習をしています。それを理解しようとするのではなく、この答えを覚えておけば、彼を助けることはできません。確かに試験では、別の再帰問題を解決する必要があります。 – Stephan202