/ / घटाव (सूची) पायथन 3 में पुनरावर्ती रूप से - पायथन-3.x, पुनरावृत्ति

पाइथन 3 - पायथन-3.x, रिकर्सन में पुनरावृत्ति (सूची)

मुझे पता है कि एक सूची में संख्याओं को पुनरावर्ती रूप से कैसे जोड़ा जाए

def mysum(L):
if not L:
return 0
else:
return L[0] + mysum(L[1:])

क्या आप मुझे उसी तरीके से पुन: घटाव का निर्माण करने में मदद कर सकते हैं (केवल एक इनपुट - सूची)।

mydiff([10,1,2,3])

बहुत धन्यवाद

उत्तर:

उत्तर № 1 के लिए 1

यदि अनुक्रम है (3,2,1), परिणाम 0. है। लेकिन घटाव रिवर्स दिशा में जा रहा है, अर्थात 2 -1 से 3 - (2-1) यदि तुम प्रयोग करते हो return L[0] - mysum(L[1:]).

इसलिए हमें एक संचायक का उपयोग करना होगा जो एक अनुक्रम के पहले और दूसरे तत्व का अंतर रखता है।

def mydiff(L, acc=None):
if not L:
return acc
else:
if acc is None:
acc = L[0] - L[1]
L = L[2:]
else:
acc -= L[0]
L = L[1:]
return mydiff(L, acc)

अधिक सरल एक;

def mysub(seq, acc=None):
seq = iter(seq)
if acc is None:
item = next(seq, None)
if item is None:
return acc
acc = item

item = next(seq, None)
if item is None:
return acc
return mysub(seq, acc - item)

उत्तर № 2 के लिए 1

की जाने वाली गणना है

>>> 10-(1+(2+(3+0)))
4

इसलिए पहला ऑपरेशन एक घटाव है, लेकिनबाकी ऑपरेशनों में कुछ अतिरिक्त रहे। मुझे लगता है कि आपको एक आंतरिक फ़ंक्शन का उपयोग करने की आवश्यकता है यदि आप मुख्य फ़ंक्शन में दूसरा पैरामीटर जोड़ने की अनुमति नहीं देते हैं:

def mydiff(L):
def sub(L, first=False):
if not L:
return 0
else:
if first:
return L[0] - sub(L[1:])
else:
return L[0] + sub(L[1:])
return sub(L, True)

परिक्षण:

>>> mydiff([10,1,2,3])
4