अनंत recursion से बचना
चक्र पहचान, गहराई सीमाएँ और हर साक्षात्कारकर्ता द्वारा जाँची जाने वाली recursion सुरक्षा सीखें
अनंत recursion से बचना, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
प्रश्न के पीछे छिपा प्रश्न
पुनरावर्ती CTE लिखने के बाद एक कुशल साक्षात्कारकर्ता पूछता है: "यदि डेटा में चक्र हो तो क्या होगा?" इससे यह जाँचा जाता है कि आप समझते हैं या नहीं कि पुनरावृत्ति हमेशा चल सकती है — और क्या आप इसे रोकने के उपाय जानते हैं।
चक्र तब बनता है जब पदानुक्रम अपने ही ऊपर लौट आता है: A, B को रिपोर्ट करता है और B, A को। सरल पुनरावर्ती भाग इनके बीच अनिश्चितकाल तक आता-जाता रहेगा।
चक्र कैसे बनता है
वृक्ष चक्ररहित होने चाहिए, लेकिन वास्तविक डेटा अक्सर अव्यवस्थित होता है। किसी गलत अद्यतन से कोई कर्मचारी स्वयं का अप्रत्यक्ष प्रबंधक बन सकता है। "उपयोगकर्ता जो अन्य उपयोगकर्ताओं का अनुसरण करते हैं" जैसा ग्राफ़ स्वभाव से चक्रीय होता है।
जब पुनरावर्ती भाग पहले देखे जा चुके नोड को फिर देखता है, तो वह उस नोड को दोबारा बनाता है, जिससे उसके बच्चों की प्रक्रिया फिर शुरू हो जाती है और लूप कभी खाली नहीं होता। पुनरावृत्ति तभी रुकती है जब कोई चरण कोई पंक्ति न लौटाए; चक्र यह सुनिश्चित करता है कि पंक्तियाँ हमेशा लौटती रहें।
सुरक्षा-उपाय 1: गहराई की सीमा
सबसे सरल सुरक्षा-जाल पुनरावर्ती भाग में सीमा के साथ गहराई-सूचक रखना है। चक्र होने पर भी पुनरावृत्ति उस सीमा पर रुक जाएगी।
यह एक मोटा उपाय है — इससे वैध रूप से गहरे वृक्ष भी सीमित हो जाते हैं — लेकिन यह तेज़ और साक्षात्कार के लिए सुविधाजनक है।
WITH RECURSIVE org AS (
SELECT id, name, manager_id, 1 AS depth
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id, o.depth + 1
FROM employees e JOIN org o ON e.manager_id = o.id
WHERE o.depth < 50
)
SELECT * FROM org;सुरक्षा-उपाय 2: देखे गए नोडों का पथ
एक सटीक सुरक्षा-जाँच देखे गए नोडों के पथ पर नज़र रखती है और पथ में पहले से मौजूद नोड में दोबारा प्रवेश करने से मना करती है। पहचानकर्ताओं को किसी स्ट्रिंग (या ऐरे) में जमा कीजिए और पुनरावृत्ति से पहले सदस्यता जाँचिए।
इससे वैध वृक्षों में मनमानी गहराई की अनुमति देते हुए चक्र ठीक उसी समय रुक जाते हैं।
WITH RECURSIVE org AS (
SELECT id, name, manager_id,
CAST(',' || id || ',' AS VARCHAR(2000)) AS path
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id,
o.path || e.id || ','
FROM employees e JOIN org o ON e.manager_id = o.id
WHERE o.path NOT LIKE '%,' || e.id || ',%'
)
SELECT id, name, path FROM org;पथ-जाँच क्यों काम करती है
शर्त path NOT LIKE '%,' || e.id || ',%' का अर्थ है "इस किनारे का अनुसरण तभी करें जब child id पहले से पथ में न हो।" अल्पविराम सीमांकक का काम करते हैं, इसलिए id 1, id 15 के भीतर गलती से मेल नहीं खाता।
यदि कोई चक्र किसी नोड पर दोबारा पहुँचने वाला हो, तो WHERE उस पंक्ति को छाँट देता है, पुनरावर्ती भाग अंततः कुछ नहीं लौटाता और पुनरावृत्ति व्यवस्थित रूप से समाप्त हो जाती है।
सुरक्षा-उपाय 3: मूल CYCLE क्लॉज़
आधुनिक पोस्टग्रेज़ (14+) और SQL मानक में पहले से मौजूद CYCLE क्लॉज़ पथ-जाँच को स्वचालित करते हैं और आपके लिए चक्रों का संकेत देते हैं। जब इंजन इसका समर्थन करता हो, तो यह सबसे साफ़ उत्तर है।
WITH RECURSIVE org AS (
SELECT id, name, manager_id FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e JOIN org o ON e.manager_id = o.id
)
CYCLE id SET is_cycle USING cycle_path
SELECT id, name, is_cycle FROM org;एसक्यूएल सर्वर का MAXRECURSION
एसक्यूएल सर्वर डिफ़ॉल्ट रूप से पुनरावृत्ति के 100 स्तरों की सीमा लागू करता है। यदि कोई चक्र (या गहरा वृक्ष) इससे आगे निकल जाए, तो क्वेरी अनंत समय तक चलने के बजाय त्रुटि के साथ विफल हो जाती है — यह एक अंतर्निहित सुरक्षा-उपाय है।
आप OPTION (MAXRECURSION n) से इस सीमा को बढ़ा या हटा सकते हैं, जहाँ 0 का अर्थ असीमित है। लेकिन पथ-सुरक्षा के बिना सीमा हटाने से चक्रीय डेटा पर अनंत लूप का जोखिम फिर पैदा हो जाता है।
-- Cap recursion at 200 levels in SQL Server
SELECT * FROM org
OPTION (MAXRECURSION 200);चक्रों का पता लगाना बनाम उन्हें रोकना
साक्षात्कारकर्ता दो अलग-अलग उद्देश्यों में अंतर कर सकते हैं:
- रोकना — क्वेरी पूरी हो जाए, इसलिए चक्रीय किनारे को चुपचाप छोड़ देना (पथ-जाँच वाला
WHERE)। - पता लगाकर बताना — यह दिखाना कि कौन-सी पंक्तियाँ चक्र का हिस्सा हैं, ताकि डेटा टीम गलत डेटा ठीक कर सके (
CYCLEक्लॉज़ काis_cycleसंकेतक)।
दोनों तरीकों को जानना और यह समझना कि किसे कब अपनाना है, वरिष्ठ-स्तरीय अंतर दर्शाता है।
प्रदर्शन संबंधी विचार
चक्र न होने पर भी पुनरावृत्ति महँगी हो सकती है। साक्षात्कारकर्ता इन सुझावों को सुनना पसंद करते हैं:
- जोड़ वाले स्तंभ पर अनुक्रमणिका बनाइए (जैसे
manager_id), ताकि हर चरण का जोड़ तेज़ हो। - आधार भाग में जल्दी फ़िल्टर लगाइए, ताकि पूरी तालिका के बजाय केवल आवश्यक उपवृक्ष से शुरुआत हो।
SELECT *से बचिए — केवल पुनरावृत्ति के लिए आवश्यक स्तंभ और अपनाdepth/pathसाथ रखिए।
एक सुरक्षित नमूना
सुरक्षा-उपायों को ऐसे नमूने में मिलाइए जिसे आप दबाव में भी दोहरा सकें: पीछे की सुरक्षा के रूप में गहराई वाला स्तंभ और सटीक सुरक्षा-जाँच के रूप में पथ-जाँच। साफ़ डेटा में इनमें से कोई एक जरूरत से अधिक भी हो, फिर भी दोनों दिखाने से आपकी सावधानी और दृढ़ता दिखाई देती है।
WITH RECURSIVE walk AS (
SELECT id, parent_id, 1 AS depth,
CAST(',' || id || ',' AS VARCHAR(4000)) AS path
FROM nodes WHERE parent_id IS NULL
UNION ALL
SELECT n.id, n.parent_id, w.depth + 1,
w.path || n.id || ','
FROM nodes n JOIN walk w ON n.parent_id = w.id
WHERE w.depth < 100
AND w.path NOT LIKE '%,' || n.id || ',%'
)
SELECT id, depth FROM walk;साक्षात्कार की आम गलतियाँ
इन अंतिम जालों से बचिए:
- एसक्यूएल सर्वर पर किसी अन्य सुरक्षा-जाँच के बिना
MAXRECURSIONहटाना — इससे अनंत लूप का जोखिम फिर खुल जाता है। - पथ वाली स्ट्रिंग का स्तंभ बहुत छोटा घोषित करना, जिससे वह कट जाए और सुरक्षा-जाँच बिना सूचना के टूट जाए।
- अल्पविराम सीमांकक के बिना पहचानकर्ताओं का मिलान करना, जिससे id 1, id 21 के भीतर गलती से मेल खा जाए।
- सिर्फ इसलिए डेटा को चक्ररहित मान लेना कि वह "ऐसा होना चाहिए" — हमेशा यह प्रश्न पूछिए।
त्वरित जाँच
वह सुरक्षा-उपाय चुनिए जो वैध गहराई पर सीमा लगाए बिना चक्रों को सटीक रूप से रोकता है।
पुनरावलोकन
हर पुनरावर्ती CTE उत्तर में सुरक्षा का ध्यान रखा जाना चाहिए:
- चक्र पुनरावर्ती भाग को कभी खाली न लौटने देते हैं, इसलिए पुनरावृत्ति कभी नहीं रुकती।
- गहराई की सीमा = त्वरित पीछे की सुरक्षा; देखे गए पथ की जाँच = सटीक चक्र-रोकथाम; CYCLE क्लॉज़ = आधुनिक इंजनों में मूल चक्र-पहचान।
- एसक्यूएल सर्वर का
MAXRECURSION 100एक अंतर्निहित सुरक्षा-वाल्व है — किसी अन्य सुरक्षा-उपाय के बिना इसे न हटाइए। - प्रदर्शन के लिए जोड़ वाले स्तंभ पर अनुक्रमणिका बनाइए और सीमित दायरे से शुरुआत कीजिए।
अब आप पुनरावर्ती CTE को शुरू से अंत तक लिख, संचरित, बना और सुरक्षित कर सकते हैं।
एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 90
- पाठ
- 360
अक्सर पूछे जाने वाले प्रश्न
क्या “अनंत recursion से बचना” पाठ निःशुल्क है?
हाँ—“अनंत recursion से बचना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“अनंत recursion से बचना” में मैं क्या सीखूँगा?
चक्र पहचान, गहराई सीमाएँ और हर साक्षात्कारकर्ता द्वारा जाँची जाने वाली recursion सुरक्षा सीखें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“अनंत recursion से बचना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Anchor और Recursive सदस्य
- संगठनात्मक चार्ट में आगे बढ़ना
- संख्या और तारीख की श्रृंखलाएँ बनाना
- अनंत recursion से बचना