اذهب إلى المحتوى
  • 0

ما الفرق بين الحلقة التكرارية والتعاود recursion

Ahmed Yehia2

السؤال

Recommended Posts

  • 0

يجب أولا فهم كل منهما على حدة قبل محاولة إدراك الفروق الجوهرية التي تميز كلا منهما عن الآخر: 

  • عندما تقوم الدالة بإعادة استدعاء نفسها يدعى هذا بالتعاود 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 مرات. 

وفيما يلي أهم الفروق بينهما: 

  • التعريف، بشكل واضح فإنهما يختلفان من حيث المفهوم والفكرة التي يخدمها كل منهما. 
  • السرعة، إذ أن تنفيذ التعاود أقل وأبطئ نسبيا من التكرارات التي هي أسرع منه من ناحية التنفيذ.
  • السياق، إذ يمكن للتكرارت إستعمال أية متغيرات معرفة بشكل عام في حين أن التعاود لا يمكنه إلا إستعمال سياق خاص به، إذ لا يمكن الوصول إلى متغير خارج الدالة التي تقوم بالتعاود.
  • التعقيد، يعتبر التعاود أعقد نسبيا من ناحية فهم وتجريده. 
  • قابلية القراءة، إذ يعتبر التعاود أفضل وأنظف من ناحية قابلية القراءة. 

ويشتركان في حيث أنهما:

  • الشرط، من الواضح أن كل منهما يمتلك شرطا خاصا لكسر التكرار أو التعاود. 

يمكنك الاستزادة بالاطلاع على التعاود حسب ويكي حسوب، الحلقات التكرارية في البرمجة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
  • بالإضافة إلى إجابة عدنان فإن الrecursion يستهلك مساحة أكثر من الذاكرة memory حيث أن في كل لفة يتم تخزين مؤشر إلى الدالة في الmemory stack مما يأخذ مساحة من الذاكرة, بالتالي فإن الiteration يكون أسرع نسبيًا من الrecursion , ولكن هذا يأتي على  حساب التبسيط فإن يوجد بعض المشاكل مثل ال divide and conquer لا يمكن تطبيقها بواسطة الiteration إلا بصعوبة
  • ولكن على الرغم من ذلك فإن الrecursion في أوقات كثيرة لا يتسبب بالمشاكل التي بالأعلى وذلك بسبب أن في أوقات كثيرة الcompiler يقوم تلقائيًا بتحويل الشفرة البرمجية الخاصة بالrecursion إلى الiteration
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...