किसी चीज़ को खुद के संदर्भ में परिभाषित करने की क्षमता को रिकर्शन कहते हैं। F# में रिकर्शन सबसे आम तौर पर रिकर्शन फंक्शन में मिलता है, यानी ऐसे फंक्शन जो खुद को कॉल करते हैं।
एक रिकर्शन फंक्शन में कम से कम एक बेस केस और कम से कम एक रिकर्शन केस होना चाहिए। बेस केस फंक्शन को फिर से कॉल किए बिना एक वैल्यू लौटाता है। रिकर्शन केस फंक्शन को फिर से कॉल करता है और इनपुट में बदलाव करता है ताकि वह किसी समय बेस केस से मेल खाए।
रिकर्शन फंक्शन सामान्य फंक्शन की तरह ही बनाए जाते हैं, लेकिन rec मॉडिफायर के साथ। इस मॉडिफायर के बिना फंक्शन खुद को कॉल नहीं कर पाएगा, और ऐसा करने की कोशिश करने पर कंपाइलेशन एरर मिलेगी। इसलिए रिकर्शन को स्पष्ट रूप से चुनना ज़रूरी है।
let rec factorial x =
// Base case
if x = 1 then
1
// Recursive case
else
x * factorial (x - 1)
F# डिस्क्रिमिनेटेड यूनियन टाइप के ज़रिए रिकर्शन टाइप को भी सपोर्ट करता है। रिकर्शन डिस्क्रिमिनेटेड यूनियन टाइप में एक या अधिक केस अपने डेटा में उसी डिस्क्रिमिनेटेड यूनियन टाइप का संदर्भ देते हैं। रिकर्शन फंक्शन की तरह रिकर्शन टाइप में भी एक बेस केस होना चाहिए। रिकर्शन फंक्शन के विपरीत रिकर्शन टाइप rec कीवर्ड का इस्तेमाल नहीं करते।
type RussianDoll =
| Doll // Base case
| Layer of RussianDoll // Recursive case
इस अभ्यास में आप एक ऐसी पिज़्ज़ा दुकान पर काम कर रहे हैं जो ग्राहकों तक पिज़्ज़ा पहुँचाती है।
आप तीन तरह के पिज़्ज़ा देते हैं:
ग्राहक थोड़ी अतिरिक्त फीस देकर दो अतिरिक्त विकल्प भी चुन सकते हैं:
जब ग्राहक ऑर्डर देते हैं, तो अगर वे सिर्फ एक या दो पिज़्ज़ा ही ऑर्डर करते हैं, तो एक अतिरिक्त फीस जोड़ी जाती है:
आपके पास तीन काम हैं, और हर काम पिज़्ज़ा और उसकी कीमत से जुड़ा है।
Pizza डिस्क्रिमिनेटेड यूनियन बनाइए, जो पिज़्ज़ा के प्रकारों और पिज़्ज़ा में जोड़े जा सकने वाले दो अतिरिक्त विकल्पों को दर्शाती है:
MargheritaCapreseFormaggioExtraSauceExtraToppingspizzaPrice फंक्शन लागू कीजिए जो किसी पिज़्ज़ा की कीमत निकालता है:
pizzaPrice Caprese
// => 9
orderPrice फंक्शन लागू कीजिए जो किसी ऑर्डर की कीमत निकालता है:
orderPrice [Margherita; Formaggio]
// => 19
Exercism पर साइन अप कीजिए और F# को 18 कॉन्सेप्ट148 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।