Hướng dẫn how to return list in recursive function python - cách trả về danh sách trong hàm đệ quy python

Tôi đang mã hóa một chương trình, một phần của chương trình là tôi muốn tạo một danh sách với tất cả các chuỗi con từ một chuỗi, sử dụng hàm đệ quy.

Tuy nhiên, khi tôi trả lại danh sách, tôi không nhận được gì. Các trình phát sinh biến có giá trị không có giá trị.

Làm thế nào tôi có thể trả lại danh sách, mà không mất tất cả dữ liệu trong đó?

def main[string]:
    substringList = []
    substringList = substring[string, substringList]

def substring[string, substringList]:#Recursive function to create all the
    length = len[string]             #substrings**strong text**

    if length == 0:
        return substringList

    else:
        substringList.append[string]
        substring[string[1::], substringList]


string = "bananas"
main[string]

AMC

2.5847 Huy hiệu vàng12 Huy hiệu bạc34 Huy hiệu đồng7 gold badges12 silver badges34 bronze badges

Đã hỏi ngày 3 tháng 12 năm 2015 lúc 22:43Dec 3, 2015 at 22:43

3

Bạn có giá trị "Không" vì bạn quên sử dụng lệnh trả về. Ngoài ra, tại sao bạn lại viết một chức năng trình bao bọc riêng để gọi chức năng đệ quy của bạn? Bạn có thể làm điều đó đủ dễ dàng trong chương trình chính. Bạn có thể liệt kê giá trị mặc định của SubringList trong cấu hình gọi với = []. Mã mới:return command. Also, why are you writing a separate wrapper function to call your recursive function? You can do that easily enough in the main program. You can list the default value of substringList in the calling profile with =[]. New code:

def substring[string, substringList=[]]:
    # Recursive function to create all the substrings
    #   of the given string

    if len[string] == 0:
        return substringList

    else:
        substringList.append[string]
        substring[string[1:], substringList]
        return substringList

print substring["bananas"]

Bây giờ, lưu ý rằng bạn cũng chưa viết logic để có được tất cả các chuỗi con: bạn chỉ lấy những cái kết thúc bằng chữ cái cuối cùng. Cách bạn nêu vấn đề, bạn cũng cần những người khác, chẳng hạn như "Nan", "N", v.v. Tôi hy vọng đó là những gì bạn đang tấn công tiếp theo. Lưu ý rằng bạn có thể muốn đệ quy nhiều hơn: Một cuộc gọi thứ hai tìm thấy những gì bạn nhận được từ việc cắt bỏ phần cuối của danh sách này. Là đủ của một gợi ý để bạn đi?

Đã trả lời ngày 4 tháng 12 năm 2015 lúc 0:33Dec 4, 2015 at 0:33

PruneprunePrune

76K14 Huy hiệu vàng57 Huy hiệu bạc76 Huy hiệu đồng14 gold badges57 silver badges76 bronze badges

1

Đây có phải là những gì bạn đang tìm kiếm?

def main[string]:
    substringList = []
    substringList = substring[string, substringList]
    return substringList
def substring[string, substringList]:#Recursive function to create all the
    length = len[string]             #substrings**strong text**

    if length == 0:
        return substringList

    else:
        substringList.append[string]
        substring[string[1::], substringList]
        return substringList


string = "bananas"
main[string]

>>>['bananas', 'ananas', 'nanas', 'anas', 'nas', 'as', 's']

Đã trả lời ngày 3 tháng 12 năm 2015 lúc 22:48Dec 3, 2015 at 22:48

RietrietRiet

1.2101 Huy hiệu vàng15 Huy hiệu bạc28 Huy hiệu đồng1 gold badge15 silver badges28 bronze badges

2

Câu trả lời của Prune ở trên có một vấn đề; Tuy nhiên, tôi vẫn chưa kiếm đủ điểm để bình luận nên ở đây. Nếu bạn chạy kết quả sau đây từ cuộc gọi thứ hai sẽ bao gồm kết quả của cuộc gọi đầu tiên được nối với cuộc gọi đầu tiên. I E.

def substring[string, substringList=[]]:
    # Recursive function to create all the substrings
    #   of the given string

    if len[string] == 0:
        return substringList

    else:
        substringList.append[string]
        substring[string[1:], substringList]
        return substringList

print [substring["bananas"]]
print [substring["two"]]

Kết quả trong :

. 'như', 's', 'hai', 'wo', 'o']]]

Đã trả lời ngày 11 tháng 4 năm 2020 lúc 0:09Apr 11, 2020 at 0:09

Tôi nghĩ dưới đây là một giải pháp đơn giản hơn cho vấn đề của bạn và cũng khắc phục vấn đề được chỉ ra bởi Gordonc.

def substring[stringList]:
    # Recursive function to create all the substrings of the given string
    last_str = stringList[-1]
    if len[last_str] == 1:
        return stringList
    else:
        return substring[stringList + [last_str[1:]]]


print[substring[["bananas"]]]
print[substring[["two"]]]
print[substring[["what"]]]

Đầu ra là

['bananas', 'ananas', 'nanas', 'anas', 'nas', 'as', 's']
['two', 'wo', 'o']
['what', 'hat', 'at', 't']

Đã trả lời ngày 12 tháng 12 năm 2021 lúc 6:48Dec 12, 2021 at 6:48

Tái phát trong Python là gì?

Python cũng chấp nhận đệ quy chức năng, có nghĩa là một hàm được xác định có thể tự gọi. Recursion là một khái niệm toán học và lập trình phổ biến. Nó có nghĩa là một chức năng tự gọi. Điều này có lợi ích của ý nghĩa mà bạn có thể lặp qua dữ liệu để đạt được kết quả.a defined function can call itself. Recursion is a common mathematical and programming concept. It means that a function calls itself. This has the benefit of meaning that you can loop through data to reach a result.

3 phần của hàm đệ quy là gì?

Một trường hợp đệ quy có ba thành phần: chia vấn đề thành một hoặc nhiều phần đơn giản hơn hoặc nhỏ hơn của vấn đề, hãy gọi hàm [đệ quy] trên mỗi phần và. Kết hợp các giải pháp của các bộ phận thành một giải pháp cho vấn đề.divide the problem into one or more simpler or smaller parts of the problem, call the function [recursively] on each part, and. combine the solutions of the parts into a solution for the problem.

Bạn có thể đuôi đệ quy trong Python?

Chúng ta cần Python để loại bỏ khung trước đó khi một hàm tái tạo đuôi tự gọi nó.Tối ưu hóa cuộc gọi đuôi là một phương pháp cho phép đệ quy vô hạn của các chức năng đệ quy đuôi xảy ra mà không có tràn ngăn xếp.Tail-call optimization is a method which allows infinite recursion of tail- recursive functions to occur without stack overflow.

Chức năng đệ quy hoạt động như thế nào trong Python?

Các hàm đệ quy trong Python Một hàm đệ quy là một hàm được xác định theo bản thân thông qua các biểu thức tự tham chiếu.Điều này có nghĩa là chức năng sẽ tiếp tục tự gọi và lặp lại hành vi của nó cho đến khi một số điều kiện được đáp ứng để trả về kết quả.a function defined in terms of itself via self-referential expressions. This means that the function will continue to call itself and repeat its behavior until some condition is met to return a result.

Bài Viết Liên Quan

Chủ Đề