रिकर्शन वाले फंक्शन ऐसे फंक्शन होते हैं जो खुद को कॉल करते हैं।
एक रिकर्शन वाले फंक्शन में कम से कम एक बेस केस और कम से कम एक रिकर्सिव केस होना चाहिए।
बेस केस फंक्शन को दोबारा कॉल किए बिना एक वैल्यू लौटाता है। रिकर्सिव केस फंक्शन को दोबारा कॉल करता है और इनपुट को इस तरह बदल देता है कि वह किसी समय बेस केस से मेल खाने लगे।
बहुत बार हर केस को उसके अपने फंक्शन क्लॉज़ में लिखा जाता है।
# base case
def count([]), do: 0
# recursive case
def count([_head | tail]), do: 1 + count(tail)
आपको पक्षी देखने का बहुत शौक है और आप यह हिसाब रखते हैं कि किसी भी दिन आपके बगीचे में कितने पक्षी आए।
आपने तय किया है कि अब पक्षी देखने को एक नए लेवल पर ले जाना है और कुछ ऐसे टूल बनाने हैं जो इस डेटा पर नज़र रखने और उसे संसाधित करने में आपकी मदद करें।
आपने डेटा को पूर्णांकों की एक ऐरे के रूप में रखने का फैसला किया है। ऐरे में पहली संख्या उन पक्षियों की है जो आज आपके बगीचे में आए, दूसरी कल आए पक्षियों की, और इसी तरह आगे भी।
BirdCount.today/1 फंक्शन बनाइए। यह पक्षियों की रोज़ाना गिनती की एक ऐरे लेता है और आज की गिनती लौटाता है। अगर ऐरे खाली हो, तो इसे nil लौटाना चाहिए।
BirdCount.today([2, 5, 1])
# => 2
BirdCount.increment_day_count/1 फंक्शन बनाइए। यह पक्षियों की रोज़ाना गिनती की एक ऐरे लेता है और आज की गिनती को 1 से बढ़ा देता है। अगर ऐरे खाली हो, तो [1] लौटाइए।
BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]
BirdCount.has_day_without_birds?/1 फंक्शन बनाइए। यह पक्षियों की रोज़ाना गिनती की एक ऐरे लेता है। अगर कम से कम एक दिन ऐसा था जब बगीचे में कोई पक्षी नहीं आया, तो इसे true लौटाना चाहिए, और वरना false।
BirdCount.has_day_without_birds?([2, 0, 4])
# => true
BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false
BirdCount.total/1 फंक्शन बनाइए। यह पक्षियों की रोज़ाना गिनती की एक ऐरे लेता है और आपके बगीचे में अब तक आए कुल पक्षियों की संख्या लौटाता है, यानी जब से आपने डेटा इकट्ठा करना शुरू किया।
BirdCount.total([4, 0, 9, 0, 5])
# => 18
कुछ दिन बाकी दिनों से ज़्यादा व्यस्त होते हैं। व्यस्त दिन वह होता है जब आपके बगीचे में पाँच या उससे अधिक पक्षी आए हों।
BirdCount.busy_days/1 फंक्शन बनाइए। यह पक्षियों की रोज़ाना गिनती की एक ऐरे लेता है और व्यस्त दिनों की संख्या लौटाता है।
BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
Exercism पर साइन अप कीजिए और Elixir को 58 कॉन्सेप्ट168 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।