/ / एक फ़ंक्शन को कैसे लिखना है जो किसी सूची में संख्याओं को स्वयं कॉल करके जोड़ता है? - अजगर, सूची, पुनरावृत्ति, राशि

एक फ़ंक्शन को कैसे लिखना है जो एक सूची में संख्याओं को खुद कॉल करके जोड़ता है? - अजगर, सूची, पुनरावृत्ति, राशि

मैं एक फ़ंक्शन लिखने की कोशिश कर रहा हूं जो एक सूची में सभी नंबरों को जोड़ता है, लेकिन पायथन में खुद को कॉल करके। यहां मेरा एक उदाहरण है:

def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)

किसी सूची का योग खोजने के लिए आप इसका उपयोग कैसे करेंगे?

उत्तर:

जवाब के लिए 0 № 1
nums = [1, 3, 2, 8, 9]
def rec_sum(nums):
if not nums: return 0
return nums[0] + rec_sum(nums[1:])

>>> rec_sum(nums)
23

आप इसे एक पंक्ति में भी कर सकते हैं:

def rec_sum(nums):
return nums[0] + rec_sum(nums[1:]) if nums else 0

सूची की सभी उथली प्रतियों से बचने के लिए nums[1:] प्रत्येक कॉल पर आप कुछ अधिक कुशल कर सकते हैं:

def rec_sum(nums, i=0):
if i >= len(nums): return 0
return nums[i] + rec_sum(nums, i+1)

यह भी उपयोग करने के लिए मजेदार है वाई Combinator

>>> Y = lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))
>>> rec_sum = lambda f: lambda nums: nums[0] + f(nums[1:]) if nums else 0
>>> Y(rec_sum)(nums)
23