Hướng dẫn recursive function returning none python - hàm đệ quy không trả về python

Mặc dù tôi nghĩ rằng Martijn Pieters trả lời giải quyết vấn đề chính trong câu trả lời của anh ấy [bạn cần quay lại từ trường hợp đệ quy], tôi không nghĩ rằng mã được đề xuất của anh ấy sẽ hoạt động đúng.

Bạn đang cố gắng thực hiện một tìm kiếm chiều sâu đầu tiên cho giá trị

>>> directory = {"a": "a info",
                 "b": {"c": "b/c info", "d": "b/d info"},
                 "e": {"f": "e/f info", "g": {"h": "e/g/h info"}}}
>>> print[get_path[directory, "h"]]
e\g\h
>>> print[get_path[directory, r'g\h']]
e\g\h
0 trong
>>> directory = {"a": "a info",
                 "b": {"c": "b/c info", "d": "b/d info"},
                 "e": {"f": "e/f info", "g": {"h": "e/g/h info"}}}
>>> print[get_path[directory, "h"]]
e\g\h
>>> print[get_path[directory, r'g\h']]
e\g\h
1 Dict lồng nhau. Nhưng mã hiện tại của bạn không xử lý chính xác trường hợp đệ quy. Nó cần phải trả lời một cách thích hợp nếu kết quả được tìm thấy trong một trong các cuộc gọi đệ quy của nó hoặc nếu cuộc gọi đệ quy không tìm thấy mục tiêu.

Đây là những gì tôi nghĩ bạn cần, với một số điều được đổi tên hoặc sắp xếp lại cho sự rõ ràng:

def get_path[directory, rqfile, prefix=[]]:
    for filename, value in directory.items[]:
        path_list = prefix + [filename]
        if not isinstance[value, dict]: # base case
            path = os.path.join[*path_list]
            if rqfile in path:   # Found the file. Do you want to do something
                return path      # with the value here, or is it junk?

        else: # recursive case
            try:
                return get_path[value, rqfile, path_list] # this only returns if 
            except ValueError:                     # the recursion doesn't raise
                pass

    raise ValueError["Requested file not found"] # not found here or in children

Ví dụ sử dụng:

>>> directory = {"a": "a info",
                 "b": {"c": "b/c info", "d": "b/d info"},
                 "e": {"f": "e/f info", "g": {"h": "e/g/h info"}}}
>>> print[get_path[directory, "h"]]
e\g\h
>>> print[get_path[directory, r'g\h']]
e\g\h

Nếu bạn không muốn tăng các ngoại lệ khi không tìm thấy tệp, bạn cũng có thể trả về giá trị sentinel như

>>> directory = {"a": "a info",
                 "b": {"c": "b/c info", "d": "b/d info"},
                 "e": {"f": "e/f info", "g": {"h": "e/g/h info"}}}
>>> print[get_path[directory, "h"]]
e\g\h
>>> print[get_path[directory, r'g\h']]
e\g\h
2 thay cho dòng cuối cùng và kiểm tra giá trị sentinel trong trường hợp đệ quy thay vì ________ 13/________ 14:

 result = get_path[value, rqfile, path]
 if result is not None:
     return result

Câu trả lời được đề xuất

Nhìn vào chức năng của bạn, khi độ sâu> 0, nó thực thi hàm [độ sâu -1], nhưng nó không trả về không có gì [do đó không có]. Bạn phải viết

def function[depth]:
    if depth > 0:
        return function[depth - 1]
    else:
        return 10

function[5]

Nhảy để đăng

Bạn phải trả về giá trị từ hàm đệ quy.

def function[depth]:
    if depth > 0:
        return function[depth - 1]
    else:
        return 10

function[5]

EDIT: Xin lỗi, đã kiểm tra nó trong khi nó đã được trả lời.

Nhảy để đăng

Bạn phải trả về giá trị từ hàm đệ quy.

EDIT: Xin lỗi, đã kiểm tra nó trong khi nó đã được trả lời. 1,391 Programming Explorer Team Colleague

Tất cả 5 câu trả lời

Nhìn vào chức năng của bạn, khi độ sâu> 0, nó thực thi hàm [độ sâu -1], nhưng nó không trả về không có gì [do đó không có]. Bạn phải viết

def function[depth]:
    if depth > 0:
        return function[depth - 1]
    else:
        return 10

function[5]

12 năm trước

Bạn phải trả về giá trị từ hàm đệ quy.

def function[depth]:
    if depth > 0:
        return function[depth - 1]
    else:
        return 10

function[5]

EDIT: Xin lỗi, đã kiểm tra nó trong khi nó đã được trả lời.

Đã chỉnh sửa 12 năm trước bởi beat_slayer vì: n/a

12 năm trước

Bạn phải trả về giá trị từ hàm đệ quy.

12 năm trước

Bạn phải trả về giá trị từ hàm đệ quy.

def func[depth]:
    if depth > 0:
        return function[depth - 1]
    else:
        return 10

EDIT: Xin lỗi, đã kiểm tra nó trong khi nó đã được trả lời.

func[5] returns func[4]
  func[4] returns func[3]
    func[3] returns func[2]
      func[2] returns func[1]
        func[1] returns func[0]
          func[0] ... takes the other branch of the depth test ... returns 10

Đã chỉnh sửa 12 năm trước bởi beat_slayer vì: n/a

Cảm ơn, nó đã làm việc. Bây giờ tôi đang cố gắng để hiểu tại sao nó lại xảy ra. Có phải vì lần đầu tiên nó thực thi hàm [], không có câu lệnh trả về để nó hoàn thành thực thi hàm và trả về giá trị trả về mặc định của không?

def factorial[num]:
  try:
     assert num == int[num]
  except [AssertionError, ValueError]:
     print ["You must pass an integer parameter"]
     return None
  if num < 0:
    return 0 - factorial[-num]
  # We know num >= 0 here
  if num 

Bài Viết Liên Quan

Chủ Đề