محب علوی
مدیر
کمپیوٹر سائنس کے طالب علموں کے لیے recursive پروگرامنگ کا موضوع عموما مشکل ثابت ہوتا ہے۔ یہ مشکل اس لیے ہے کہ یہ بظاہر دائری استدلال محسوس ہوتا ہے جو کہ سوچنے کا عمومی انداز نہیں۔ کمپیوٹر سائنس میں یہ ایک ایسا طریقہ ہے جس میں کسی مسئلہ کا حل منحصر ہوتا ہے اسے چھوٹے چھوٹے ٹکڑوں میں بانٹ کر حل کرنے میں اور یہ مرکزی نکتہ ہے کمپیوٹر سائنس میں۔
عمومی طریقہ کار یہ ہوتا ہے کہ ایک مسئلہ کو ذیلی مسائل میں تقسیم کر دیا جاتا ہے ، پھر ان مسائل کو حل کیا جاتا ہے اور بعد ازاں نتائج کو جمع کر لیا جاتا ہے۔
اسے تقسیم اور فتح (divide and conquer) طریقہ بھی کہا جاتا ہے، جب اسے لک اپ ٹیبل کے ساتھ ملایا جائے جس میں ذیلی مسائل کے نتائج کو محفوظ کیا جاتا ہے تو یہ ڈائنامک پروگرامنگ (dynamic programming) یا میمائزیشن(memoization) بھی کہلاتا ہے۔
اس کی ایک سادہ تعریف یہ ہے کہ فنکشن جب خود اپنے کو بالواسطہ یا بلاواسطہ کال کرتا ہے۔
recursive لوپ عموما لکھنے اور سمجھنے میں آسان ہوتی ہیں بمقابلہ iterative لوپ جیسا کہ while اور for ۔
iterative لوپ کو بعض پروگرامنگ زبانوں میں اس لیے فوقیت دی جاتی ہے کہ یہ کم کمپیوٹر میموری استعمال کرتی ہیں اور نسبتا تیز ہوتی ہیں recursive لوپ۔
کسی بھی iterative لوپ کو recursion کے طور پر لکھا جا سکتا ہے اور کسی بھی recursion کو iterative لوپ کے طور پر لکھا جا سکتا ہے۔
اگر اطلاق کی وضاحت recursion سے ہوتی ہو تو اسے استعمال کرنا چاہیے ورنہ iterative لوپ کا استعمال کیا جانا چاہیے۔
اگر recursion کبھی اپنے بنیادی کیس تک نہ پہنچ سکے اور وہ recursive بلاوے بلاتی چلی جائے تو پروگرام کبھی ختم نہیں ہوتا اور اسے infinite recursion کہتے ہیں۔
حقیقتاً یہ پروگرام ہمیشہ نہیں چلتا رہتا بلکہ پائتھون ایک ایرر پیغام رپورٹ کر دیتا ہے جب maximum recursion depth تک رسائی ہو جاتی ہے۔
عمومی طریقہ کار یہ ہوتا ہے کہ ایک مسئلہ کو ذیلی مسائل میں تقسیم کر دیا جاتا ہے ، پھر ان مسائل کو حل کیا جاتا ہے اور بعد ازاں نتائج کو جمع کر لیا جاتا ہے۔
اسے تقسیم اور فتح (divide and conquer) طریقہ بھی کہا جاتا ہے، جب اسے لک اپ ٹیبل کے ساتھ ملایا جائے جس میں ذیلی مسائل کے نتائج کو محفوظ کیا جاتا ہے تو یہ ڈائنامک پروگرامنگ (dynamic programming) یا میمائزیشن(memoization) بھی کہلاتا ہے۔
اس کی ایک سادہ تعریف یہ ہے کہ فنکشن جب خود اپنے کو بالواسطہ یا بلاواسطہ کال کرتا ہے۔
recursive لوپ عموما لکھنے اور سمجھنے میں آسان ہوتی ہیں بمقابلہ iterative لوپ جیسا کہ while اور for ۔
iterative لوپ کو بعض پروگرامنگ زبانوں میں اس لیے فوقیت دی جاتی ہے کہ یہ کم کمپیوٹر میموری استعمال کرتی ہیں اور نسبتا تیز ہوتی ہیں recursive لوپ۔
کسی بھی iterative لوپ کو recursion کے طور پر لکھا جا سکتا ہے اور کسی بھی recursion کو iterative لوپ کے طور پر لکھا جا سکتا ہے۔
اگر اطلاق کی وضاحت recursion سے ہوتی ہو تو اسے استعمال کرنا چاہیے ورنہ iterative لوپ کا استعمال کیا جانا چاہیے۔
اگر recursion کبھی اپنے بنیادی کیس تک نہ پہنچ سکے اور وہ recursive بلاوے بلاتی چلی جائے تو پروگرام کبھی ختم نہیں ہوتا اور اسے infinite recursion کہتے ہیں۔
حقیقتاً یہ پروگرام ہمیشہ نہیں چلتا رہتا بلکہ پائتھون ایک ایرر پیغام رپورٹ کر دیتا ہے جب maximum recursion depth تک رسائی ہو جاتی ہے۔