रूबी में रिकर्सन क्या मैं यह सही ढंग से कर रहा हूँ? - माणिक

मैं सामान्य रूप से रूबी और प्रोग्रामिंग सीख रहा हूं।मैं अपनी पहली परियोजना के रूप में एक लाठी कार्यक्रम पर काम कर रहा हूं। मेरे पास एक तरीका start_game है जिसे हर नए हाथ को शुरू करने के लिए कहा जाता है। विधि कहा जाता है और फिर हाथ खत्म होने पर खुद को फिर से कॉल करता है। क्या यह ऐसा करने का सही तरीका है। यह मेरे लिए ऐसा लगता है जैसे यह हर बार मेमोरी को आवंटित करेगा विधि कहा जाता है। मुझे यकीन नहीं है कि यह कुछ ऐसा है जो कचरा संग्रह को संभाल लेगा या नहीं। मुझे ऐसा लगता है कि शायद ऐसा करने का एक बेहतर तरीका है, लेकिन इसे समझ नहीं सकते। अग्रिम में धन्यवाद!

उत्तर:

उत्तर № 1 के लिए 1

इस तरह से पुनरावर्ती तरीके से कॉल करने से अंततः स्टैक ओवरफ्लो हो जाएगा (यदि पर्याप्त हाथ खेला जाता है, तो सुनिश्चित नहीं है कि यह कितनी संभावना है)।

जब तक कि, टेल-कॉल ऑप्टिमाइज़ेशन ऐसा होने से रोकता है। यह अनुकूलन का एक रूप है जिसे पुनरावर्ती विधि कॉल पर लागू किया जा सकता है जहां पुनरावर्ती कॉल है हमेशा आखिरी बात कहलाना किसी भी विधि के माध्यम से चलाने में। यह मूल रूप से पुनरावर्ती कॉल को एक लूप में परिवर्तित करता है, इसलिए आप हर बार राउंड में स्टैक को जोड़ना समाप्त नहीं करते हैं।

हालाँकि, इसके अनुसार सवाल आप रूबी में टेल-कॉल ऑप्टिमाइज़ेशन पर भरोसा नहीं कर सकते। इसलिए मैं आपके कोड को फिर से लिखूंगा start_game एक लूप में कहा जाता है जो यह तय करने के लिए कुछ स्थिति का परीक्षण करता है कि क्या इसे जारी रखना चाहिए।


संबंधित सवाल
सबसे लोकप्रिय