x32x01
أدارة أكتب كود
- بواسطة x32x01 ||
معظمنا سمع عن ال Recursion وازاى ان المفهموم ده مهم جدا فى معظم ال Algorithms بس يعنى ايه Recursion ؟!!
وازاى استخدام ال Recursion هيوفر عليك كتير جدا فى كتابة الكود ؟!!
اهلا بيك عزيزى المبرمج النهاردة هنتكلم عن ال Recursion
- الى كان بيمثل لمعظمنا مشكلة فى فهمة
- وازاى هو مهم فى معظم ال Algorithms
وكالعادة خلينا نضرب مثال نفهم منه يعنى ايه Recursion
تخيل كدا انك معاك صندوق وجواه مجموعة صناديق وكل صندوق من الصناديق دى جواه مجموعة صناديق , وفى مفتاح موجود جوا صندوق من الصناديق الكتيرة اللى عندك وانتا عايز تلاقى المفتاح ده فهتعمل التالى :
- هتفتح الصندوق الكبير وتشوف هل المفتاح جواه فى اى مكان
- لو موجود فكدا خلاص انتا لقيت المفتاح مش هتحتاج تفتح بقية الصناديق
- طب لو مش موجود :
- هتفتح كل الصناديق اللى جوا الصندوق الكبير وتدور جواه ولو لقيت المفتاح المفتاح جوا اى واحد منهم فانتا هتخرج علطول ومش هتحتاج تفتح بقية الصناديق
- طب لو المفتاح مش موجود فى اى صندوق من الصناديق اللى جوا الصندوق الكبير فانتا هتعمل التالى :
- هتمر على كل الصناديق اللى موجودة جوا الصناديق اللى موجوة جوا الصندوق الكبير وهندور فيهم بردو وهنكرر نفس اللى عملناه قبل كدا
خلينا بقا نتخيل ان المشكلة بتاعتنا اننا نلاقى المفتاح بتاعنا وان كل الخطوات اللى احنا عملناها دى هيا ال Algorithm اللى هنستخدمه علشان نحل المشكلة بتاعتنا
لو بصيت لل Algorithm ده وفكرت فيه شوية هتلاقى التالى :
- ان ال Algorithm بتاعنا هو عبارة عن خطوة واحدة وبتتكرر معانا لحد لما نلاقى المفتاح
- الخطوة دى اننا بنفتح الصندوق نشوف المفتاح موجود جواه ولا لأ
- لو موجود فاحنا كدا حلينا المشكلة بتاعتنا ولقينا المفتاح
- لو مش موجود جواه فاحنا هنكرر نفس الخطوة دى على كل الصناديق اللى موجودة جوا الصندوق ده وهكذا
- وبالتالى احنا علشان نلاقى المفتاح فاحنا هنكرر الخطوة دى عدد من المرات بس باختلاف الصندوق اللى هنطبق عليه الخطوة دى لحد لما نلاقى المفتاح
خلينا بقا نروح لل Data structure ونفهم ال Recursion فيها
- ال Recursion هو عبارة عن ان ال Method تستدعى نفسها
- وده بالظبط اللى حصل فى المثال بتاعنا ده :
- ال Method بتاعتنا اللى هتستدعى نفسها هيا الخطوة اللى اللى احنا بنكررها علشان نلاقى المفتاح
- لنفترض اننا عندنا Method مسئولة عن انها تدور جوا صندوق معين عن المفتاح
- وال Method دى هتشوف لو المفتاح موجود فى الصندوق اللى هيا بتدور فيه دلوقتى فهيا هتنهى نفسها وتدينا المكان اللى لقيت فيه المفتاح
- ولو المفتاح مش موجود فى الصندوق اللى هيا بتدور فيه دلوقتى فهيا هتستدعى نفسها تانى بس المرة دى هتتطبق على كل الصناديق اللى موجودة جوا الصندوق اللى هيا كانت بتدور فيه
الـ Recursive Method بقا بتتكون من جزئين :
أ - ال Recursive case : وده الجزء اللى هيا بتستدعى فيه نفسها بس باختلاف الجزء اللى هيا هتشتغل فيه
ب - ال Base case : وده الجزء اللى هيا بتشوف فيه انها لو وصلت للهدف الاساسى من انشائها ( اللى هو كان المفتاح فى المثال بتاعنا ) فهيا هتنهى ال Method كلها
- واهمية الجزء ده ان ال Method بتاعتنا متدخلش فى Infinite loop وتفضل شغالة لحد مالانهاية
وازاى استخدام ال Recursion هيوفر عليك كتير جدا فى كتابة الكود ؟!!
اهلا بيك عزيزى المبرمج النهاردة هنتكلم عن ال Recursion
- الى كان بيمثل لمعظمنا مشكلة فى فهمة
- وازاى هو مهم فى معظم ال Algorithms
وكالعادة خلينا نضرب مثال نفهم منه يعنى ايه Recursion
تخيل كدا انك معاك صندوق وجواه مجموعة صناديق وكل صندوق من الصناديق دى جواه مجموعة صناديق , وفى مفتاح موجود جوا صندوق من الصناديق الكتيرة اللى عندك وانتا عايز تلاقى المفتاح ده فهتعمل التالى :
- هتفتح الصندوق الكبير وتشوف هل المفتاح جواه فى اى مكان
- لو موجود فكدا خلاص انتا لقيت المفتاح مش هتحتاج تفتح بقية الصناديق
- طب لو مش موجود :
- هتفتح كل الصناديق اللى جوا الصندوق الكبير وتدور جواه ولو لقيت المفتاح المفتاح جوا اى واحد منهم فانتا هتخرج علطول ومش هتحتاج تفتح بقية الصناديق
- طب لو المفتاح مش موجود فى اى صندوق من الصناديق اللى جوا الصندوق الكبير فانتا هتعمل التالى :
- هتمر على كل الصناديق اللى موجودة جوا الصناديق اللى موجوة جوا الصندوق الكبير وهندور فيهم بردو وهنكرر نفس اللى عملناه قبل كدا
خلينا بقا نتخيل ان المشكلة بتاعتنا اننا نلاقى المفتاح بتاعنا وان كل الخطوات اللى احنا عملناها دى هيا ال Algorithm اللى هنستخدمه علشان نحل المشكلة بتاعتنا
لو بصيت لل Algorithm ده وفكرت فيه شوية هتلاقى التالى :
- ان ال Algorithm بتاعنا هو عبارة عن خطوة واحدة وبتتكرر معانا لحد لما نلاقى المفتاح
- الخطوة دى اننا بنفتح الصندوق نشوف المفتاح موجود جواه ولا لأ
- لو موجود فاحنا كدا حلينا المشكلة بتاعتنا ولقينا المفتاح
- لو مش موجود جواه فاحنا هنكرر نفس الخطوة دى على كل الصناديق اللى موجودة جوا الصندوق ده وهكذا
- وبالتالى احنا علشان نلاقى المفتاح فاحنا هنكرر الخطوة دى عدد من المرات بس باختلاف الصندوق اللى هنطبق عليه الخطوة دى لحد لما نلاقى المفتاح
خلينا بقا نروح لل Data structure ونفهم ال Recursion فيها
- ال Recursion هو عبارة عن ان ال Method تستدعى نفسها
- وده بالظبط اللى حصل فى المثال بتاعنا ده :
- ال Method بتاعتنا اللى هتستدعى نفسها هيا الخطوة اللى اللى احنا بنكررها علشان نلاقى المفتاح
- لنفترض اننا عندنا Method مسئولة عن انها تدور جوا صندوق معين عن المفتاح
- وال Method دى هتشوف لو المفتاح موجود فى الصندوق اللى هيا بتدور فيه دلوقتى فهيا هتنهى نفسها وتدينا المكان اللى لقيت فيه المفتاح
- ولو المفتاح مش موجود فى الصندوق اللى هيا بتدور فيه دلوقتى فهيا هتستدعى نفسها تانى بس المرة دى هتتطبق على كل الصناديق اللى موجودة جوا الصندوق اللى هيا كانت بتدور فيه
الـ Recursive Method بقا بتتكون من جزئين :
أ - ال Recursive case : وده الجزء اللى هيا بتستدعى فيه نفسها بس باختلاف الجزء اللى هيا هتشتغل فيه
ب - ال Base case : وده الجزء اللى هيا بتشوف فيه انها لو وصلت للهدف الاساسى من انشائها ( اللى هو كان المفتاح فى المثال بتاعنا ) فهيا هتنهى ال Method كلها
- واهمية الجزء ده ان ال Method بتاعتنا متدخلش فى Infinite loop وتفضل شغالة لحد مالانهاية