Ahmed Yehia2 نشر 3 فبراير 2022 أرسل تقرير نشر 3 فبراير 2022 ما الفرق بين الحلقة التكرارية والتعاود recursion؟ 2 اقتباس
0 Adnane Kadri نشر 3 فبراير 2022 أرسل تقرير نشر 3 فبراير 2022 يجب أولا فهم كل منهما على حدة قبل محاولة إدراك الفروق الجوهرية التي تميز كلا منهما عن الآخر: عندما تقوم الدالة بإعادة استدعاء نفسها يدعى هذا بالتعاود recursion، أي أنها تعاود استدعاء نفسها من جديد. مثال: function factorial(n) { console.log(n); if(n==0){ // ان كان المعامل الممرر يساوي واحد return 1; // نعيد 1 ونكسر التعاود }else{ return factorial(n -1); // وإلا فإننا سنحتاج تقليل قيمة المعامل ب1 وإعادة استدعاء الدالة } } factorial(1); عندما نقوم بإستدعاء الدالة factorial وتمرير المعامل 1 ستقوم الدالة بالتحقق من ما ان كان 1 يساوي 0 أو لا، فإن كان ستقوم بإعادة عدد عادي. وإلا فإنها ستقوم بإنقاص 1 من 1 وإعادة استدعاء الدالة عن طريق ناتج الطرح أي 0. هذا ببساطة ما يدعى بالتعاود. الحلقة التكرارية loop هي بشكل بسيط تكرار شيفرة معينة كذا مرة. مثال: ان كنا نريد طباعة العدد 5 ثلاث مرات في شاشة الكونسول فإن يخدم فكرتنا هنا هي الحلقات التكرارية. for(var i=1 ;i<3 ; i++){ console.log(5) } في هذا المثال، نحن نقوم بالاعتماد على الحلقة التكرارية for لإعادة طباعة 5 3 مرات. وفيما يلي أهم الفروق بينهما: التعريف، بشكل واضح فإنهما يختلفان من حيث المفهوم والفكرة التي يخدمها كل منهما. السرعة، إذ أن تنفيذ التعاود أقل وأبطئ نسبيا من التكرارات التي هي أسرع منه من ناحية التنفيذ. السياق، إذ يمكن للتكرارت إستعمال أية متغيرات معرفة بشكل عام في حين أن التعاود لا يمكنه إلا إستعمال سياق خاص به، إذ لا يمكن الوصول إلى متغير خارج الدالة التي تقوم بالتعاود. التعقيد، يعتبر التعاود أعقد نسبيا من ناحية فهم وتجريده. قابلية القراءة، إذ يعتبر التعاود أفضل وأنظف من ناحية قابلية القراءة. ويشتركان في حيث أنهما: الشرط، من الواضح أن كل منهما يمتلك شرطا خاصا لكسر التكرار أو التعاود. يمكنك الاستزادة بالاطلاع على التعاود حسب ويكي حسوب، الحلقات التكرارية في البرمجة. 1 اقتباس
0 شرف الدين حفني نشر 4 فبراير 2022 أرسل تقرير نشر 4 فبراير 2022 بالإضافة إلى إجابة عدنان فإن الrecursion يستهلك مساحة أكثر من الذاكرة memory حيث أن في كل لفة يتم تخزين مؤشر إلى الدالة في الmemory stack مما يأخذ مساحة من الذاكرة, بالتالي فإن الiteration يكون أسرع نسبيًا من الrecursion , ولكن هذا يأتي على حساب التبسيط فإن يوجد بعض المشاكل مثل ال divide and conquer لا يمكن تطبيقها بواسطة الiteration إلا بصعوبة ولكن على الرغم من ذلك فإن الrecursion في أوقات كثيرة لا يتسبب بالمشاكل التي بالأعلى وذلك بسبب أن في أوقات كثيرة الcompiler يقوم تلقائيًا بتحويل الشفرة البرمجية الخاصة بالrecursion إلى الiteration اقتباس
السؤال
Ahmed Yehia2
ما الفرق بين الحلقة التكرارية والتعاود recursion؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.