Tôi sẽ rất vui khi được trợ giúp.Tập hợp con số đệ quy trong Python
Tôi có vấn đề sau đây:
tôi cung cấp một danh sách các số seq
và một số mục tiêu và tôi cần phải viết 2 điều:
Một giải pháp đệ quy mà trả
True
nếu có là tổng của một dãy số bằng số mục tiêu vàFalse
nếu không. dụ:subset_sum([-1,1,5,4],0) # True subset_sum([-1,1,5,4],-3) # False
Thứ hai, tôi cần phải viết một giải pháp sử dụng những gì tôi đã viết trong các giải pháp trước nhưng bây giờ với memoization sử dụng một cuốn từ điển, trong đó các phím là các bộ:
(len(seq),target)
Đối số 1 đây là những gì tôi đã cho đến nay:
def subset_sum(seq, target):
if target == 0:
return True
if seq[0] == target:
return True
if len(seq) > 1:
return subset_sum(seq[1:],target-seq[0]) or subset_sum(seq[1:],target)
return False
Không chắc tôi có nó đúng vì vậy nếu tôi có thể nhận được một số đầu vào, tôi sẽ biết ơn.
Đối số 2:
def subset_sum_mem(seq, target, mem=None):
if not mem:
mem = {}
key=(len(seq),target)
if key not in mem:
if target == 0 or seq[0]==target:
mem[key] = True
if len(seq)>1:
mem[key] = subset_sum_mem(seq[1:],target-seq[0],mem) or subset_sum_mem(seq[1:],target,mem)
mem[key] = False
return mem[key]
tôi không thể có được memoization để cho tôi câu trả lời đúng vì vậy tôi muốn được vui đối với một số hướng dẫn ở đây.
Cảm ơn bất kỳ ai sẵn sàng trợ giúp!
Bất kỳ lý do bạn không chỉ sử dụng [ '@ memoize'] (http://wiki.python.org/moin/PythonDecoratorLibrary# Ghi nhớ)? –
Có lẽ vì đó là bài tập về nhà;) –
Hãy gắn thẻ làm bài tập về nhà nếu đây là bài tập về nhà thực tế. Mọi người vẫn sẽ giúp đỡ. Đó là hình thức tốt và có thể giúp mọi người hiểu bạn đến từ đâu. – istruble