Kiểm tra palindrome bằng python đệ quy

Trong hướng dẫn này, bạn sẽ học cách viết một chương trình bằng Python để kiểm tra một số đã cho có phải là đối xứng hay không bằng cách sử dụng phương pháp đệ quy

Trước khi chuyển thẳng sang viết chương trình để kiểm tra xem một số đã cho có phải là số nghịch đảo hay không bằng đệ quy, bạn nên biết

Số Palindrom là gì?

Một số Palindrome là một số đảo ngược bằng số ban đầu có nghĩa là chính số đó

Ví dụ. 121, 111, 1223221, v.v.

Trong ví dụ trên, bạn có thể thấy rằng 121 là một số đối xứng. Vì đảo ngược của 121 giống như 121

Chương trình của chúng ta sẽ hoạt động như thế nào?

Giả sử nếu ai đó đưa ra đầu vào 121 thì chương trình của chúng ta sẽ in ra “số đã cho là một số đối xứng”

Và nếu ai đó đưa ra đầu vào 123, chương trình của chúng ta sẽ in ra “số đã cho không phải là số đối xứng”

Tôi sắp tham gia một trong các khóa học khoa học máy tính sử dụng Python được khoảng 3 tuần và cuộc thảo luận đã chuyển sang lập trình đệ quy. Nghe có vẻ hơi bí ẩn và phức tạp, nhưng hóa ra viết hàm đệ quy trong Python lại khá dễ. Người hướng dẫn đã tách quá trình viết hàm đệ quy thành một vài bước. Tôi nói về các bước này trong khi tôi viết một hàm Python đệ quy để phát hiện Palindromes

Palindrome

Từ Wikipedia, palindrome là một từ, cụm từ, số hoặc chuỗi ký tự khác đọc ngược hoặc xuôi giống nhau. Tôi đã rất ngạc nhiên khi tìm thấy toàn bộ trang web dành riêng cho danh sách các palindromes mà tôi đã sử dụng để thử nghiệm. Thông thường người ta bỏ qua khoảng trắng và dấu chấm câu trong các cụm từ. Chỉ các chữ cái và số là có ý nghĩa và được sử dụng để kiểm tra một bảng màu hợp lệ

Kiểm tra Palindrome

  • Anh chuối ơi
  • Dee nhìn thấy một hạt giống
  • Không, nó đang mở trên một vị trí

Nhiệm vụ của tôi là viết một hàm đệ quy để phát hiện xem một từ hoặc cụm từ có phải là một bảng màu không

thuật toán

Khi tôi loại bỏ khoảng cách và dấu chấm câu khỏi các cụm từ cũng như biến tất cả các ký tự thành chữ thường, "Yo, cậu bé chuối. ", ví dụ, được rút gọn thành "yobananaboy"

Lúc đó mình chỉ cần so sánh ký tự đầu và ký tự cuối xem có giống nhau không. Nếu có, đây có thể là một palindrome. Nếu không, nó chắc chắn không phải là một palindrome. Trong trường hợp này, ký tự đầu tiên là "y" và ký tự cuối cùng là "y", vì vậy đây có thể là một bảng màu

Bước tiếp theo sẽ là xóa các ký tự đầu tiên và cuối cùng. Cụm từ bây giờ sẽ là "obananabo". Sau đó tôi sẽ so sánh các ký tự đầu tiên và cuối cùng trong chuỗi mới này. Nếu chúng giống nhau thì đây có thể là một bảng màu. Trong trường hợp này, ký tự đầu tiên là "o" và ký tự cuối cùng là "o", vì vậy đây có thể là một bảng màu

Tôi tiếp tục lặp đi lặp lại quá trình này cho đến khi còn lại 1 ký tự hoặc ít hơn trong cụm từ. Một chuỗi có 1 ký tự trở xuống được coi là một palindrome, vì nó giống nhau cả về phía trước và phía sau

Hàm đệ quy

Bây giờ tôi đã biết thuật toán, tôi có thể viết một hàm đệ quy để phát hiện các đối xứng

Đầu tiên, tôi cần một trường hợp cơ sở. Tôi cần một trường hợp chức năng ngừng thực hiện các cuộc gọi đệ quy. Dựa trên thuật toán, đây là khi tôi có 1 ký tự trở xuống. Trong những trường hợp này, nó là một palindrome và tôi có thể trả về True

if [len[phrase]] < 2:
    return True

Tiếp theo, tôi cần đơn giản hóa vấn đề thành một biểu thức toán học hoặc logic đơn giản hơn và gọi hàm để giải một phần nhỏ hơn của vấn đề

Nhìn vào thuật toán, biểu thức logic đơn giản hơn có thể là so sánh các ký tự đầu tiên và cuối cùng của cụm từ

phrase[0] == phrase[-1]

Sau đó, tôi có thể gọi hàm [tôi sẽ gọi hàm is_palindrome] để giải quyết một phần nhỏ hơn của chuỗi không bao gồm các ký tự đầu tiên và cuối cùng hiện tại

is_palindrome[phrase[1:len[phrase] - 1]]

Khi tôi đặt cái này lại với nhau, chức năng tôi đã tạo trông như thế này

def is_palindrome[phrase]:
    # base case
    if len[phrase] < 2:
        return True

    # divide into easier calculation
    # and recursive call
    return phrase[0] == phrase[-1] and \
        is_palindrome[phrase[1:len[phrase] - 1]]

Chương trình

tôi chưa hoàn thành. Hóa ra đó là phần dễ dàng. Bây giờ tôi cần tạo một chương trình yêu cầu cụm từ từ người dùng và loại bỏ tất cả các ký tự không phải chữ và số trước khi gọi hàm. Mặc dù có rất nhiều cách để loại bỏ các ký tự không phải chữ và số [nhanh nhất có lẽ là một biểu thức chính quy], tôi chọn Hiểu danh sách vì đây là một tính năng khá thú vị trong Python

import string


def is_palindrome[phrase]:
    # base case
    if len[phrase] < 2:
        return True

    # divide into easier calculation
    # and recursive operation
    return phrase[0] == phrase[-1] and \
        is_palindrome[phrase[1:len[phrase] - 1]]


while True:
    data = raw_input['Enter text [q to quit]: ']

    text = data.lower[]

    if text == 'q':
        break

    # strip all non alphanumeric characters
    # using Python list comprehension
    text = ''.join[[letter for letter in text
                    if letter in [string.ascii_lowercase + string.digits]]]

    text_is_a_palindrome = is_palindrome[text]

    if text_is_a_palindrome:
        print "'{}' is a palindrome.".format[data]
    else:
        print "'{}' is not a palindrome.".format[data]

Phần kết luận

Tôi đã viết một số hàm đệ quy trong Python cho các bộ bài tập và bài tập. Tôi sẽ chia sẻ những điều đó vì nó giúp tôi nói về chúng và có thể giúp những người khác xem thêm các ví dụ về các hàm đệ quy để giúp làm rõ quy trình. Sau một vài tuần học Python, tôi thực sự bắt đầu đánh giá cao ngôn ngữ này và tận hưởng nó. Tại một thời điểm nào đó, tôi sẽ chia sẻ những lỗi cú pháp mà tôi mắc phải từ C#. NET. Tôi ngày càng ít mắc lỗi hơn, nhưng chúng vẫn xuất hiện chỗ này chỗ kia. Hi vọng điêu nay co ich

Làm cách nào để kiểm tra bảng màu bằng Python đệ quy?

Cách 6 – Sử dụng đệ quy . if[isPalindrome[str1]==True]: print["Chuỗi là một đối xứng. "] khác. print["Chuỗi không phải là đối xứng. "]

Hàm palindrome Đệ quy Python là gì?

Palindromes là những chuỗi hoặc giá trị mà khi đọc từ trái sang phải và từ phải sang trái sẽ có các ký tự giống nhau trong các chỉ số tương ứng của chúng. Đệ quy tính toán đầu ra của các bit nhỏ của vấn đề lớn hơn và kết hợp các bit này để đưa ra giải pháp cho vấn đề lớn hơn .

Làm cách nào để biết liệu một danh sách có phải là bảng màu hay không sử dụng đệ quy?

Các bước giải quyết .
Duyệt đệ quy toàn bộ danh sách được liên kết để lấy nút cuối cùng làm nút ngoài cùng bên phải
So sánh nút đầu tiên [nút bên trái] với nút bên phải. .
Nếu tất cả các lệnh gọi đệ quy đều trả về true, điều đó có nghĩa là Danh sách được liên kết đã cho là một bảng màu ngược lại nó không phải là bảng màu

Làm cách nào để kiểm tra xem chuỗi có phải là palindrome trong C bằng cách sử dụng đệ quy không?

Đầu tiên chúng ta sẽ kiểm tra xem ký tự ngoài cùng bên trái[inputString[leftIndex]] có bằng ký tự ngoài cùng bên phải[inputString[rightIndex]]. .
Nếu bằng nhau, thì chúng tôi thực hiện đệ quy kiểm tra palindrome trên chuỗi con từ chỉ mục leftIndex+1 sang rightIndex-1. .
Nếu không bằng nhau, thì inputString không phải là một chuỗi palindrome

Chủ Đề