Hướng dẫn sum positive numbers python recursion - tổng các số dương phép đệ quy python

0

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Làm thế nào để sử dụng hàm đệ quy để đếm tổng của các yếu tố dương của danh sách?

Tôi không chắc làm thế nào để đi về nó? Tôi biết cách thực hiện mà không cần sử dụng chức năng đệ quy:

sum=0
for i in range[len[List]]:
    if List[i]>0:
        sum=sum+List[i]

Hỏi ngày 3 tháng 4 năm 2017 lúc 6:38Apr 3, 2017 at 6:38

Sunnysunnysunny

111 huy hiệu bạc2 huy hiệu đồng1 silver badge2 bronze badges

3

Bạn cần chia vấn đề, thành bước 'hiện tại' và phần còn lại để được xử lý bằng đệ quy. Bạn cũng cần xác định khi nào nên kết thúc đệ quy.

  • Bước hiện tại là xác định tổng số trong bước này. Đó là giá trị hiện tại hoặc 0 nếu giá trị nhỏ hơn 0.
  • Phần còn lại đang tính tổng giá trị hiện tại cho cuộc gọi đệ quy cho phần còn lại của danh sách.
  • Bạn kết thúc đệ quy khi một danh sách trống được thông qua; Tổng của một danh sách trống luôn là 0.

Cuối cùng, điều đó cho:

def recursive_positive_sum[l]:
    # end recursion for an empty list
    if not l:
        return 0
    # get a value
    value = l[0]
    if value < 0:
        value = 0
    # recurse, sum the value with the remainder
    return value + recursive_positive_sum[l[1:]]

Chúng ta có thể sử dụng

def recursive_positive_sum[l]:
    # end recursion for an empty list
    if not l:
        return 0
    # get a value
    value = l[0]
    if value < 0:
        value = 0
    # recurse, sum the value with the remainder
    return value + recursive_positive_sum[l[1:]]
0 để có được giá trị hoặc 0 và nội tuyến rằng:

def recursive_positive_sum[l]:
    if not l:
        return 0
    return max[l[0], 0] + recursive_positive_sum[l[1:]]

Demo:

>>> def recursive_positive_sum[l]:
...     if not l:
...         return 0
...     return max[l[0], 0] + recursive_positive_sum[l[1:]]
...
>>> recursive_positive_sum[[]]
0
>>> recursive_positive_sum[[-42]]
0
>>> recursive_positive_sum[[-42, 10, -81, 100]]
110

Đã trả lời ngày 3 tháng 4 năm 2017 lúc 6:52Apr 3, 2017 at 6:52

Martijn Pieters ♦ Martijn PietersMartijn Pieters

992K277 Huy hiệu vàng3906 Huy hiệu bạc3254 Huy hiệu đồng277 gold badges3906 silver badges3254 bronze badges

Đây có thể là một trong những việc làm điều đó.

def fun[l]:
    if len[l]==0:
        return 0
    num = l.pop[]
    if num > 0:
        return num + fun[l]
    return fun[l]

nhưng hãy cẩn thận. Chức năng này phá hủy danh sách đã chuyển cho nó. Vì vậy, hãy tạo một bản sao danh sách của bạn trước khi chuyển nó cho chức năng hoặc:

def fun[l]:
    if len[l]==0:
        return 0
    if len[l]==1:
        return l[0]
    num = l[0]
    if num > 0:
        return num + fun[l[1:]]
    return fun[l[1:]]

Đã trả lời ngày 3 tháng 4 năm 2017 lúc 7:13Apr 3, 2017 at 7:13

S.DoeS.DoeS.Doe

Phù hiệu đồng 391010 bronze badges

Thực hiện hàm SUM_POSITIVE_NUMBERS, dưới dạng hàm đệ quy trả về tổng của tất cả các số dương giữa số N nhận được và 1. [Đã giải quyết]

def sum_positive_numbers[n]:
  if n 

Bài Viết Liên Quan

Chủ Đề