मैं एक फ़ंक्शन लिखने की कोशिश कर रहा हूं जो एक सूची में सभी नंबरों को जोड़ता है, लेकिन पायथन में खुद को कॉल करके। यहां मेरा एक उदाहरण है:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
किसी सूची का योग खोजने के लिए आप इसका उपयोग कैसे करेंगे?
उत्तर:
जवाब के लिए 0 № 1nums = [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