Ali Ahmed55 نشر 3 نوفمبر أرسل تقرير نشر 3 نوفمبر السلام عليكم يعني من حيث الذكرا مين بيستهلك اكثر ؟ 3 اقتباس
0 Chihab Hedidi نشر 3 نوفمبر أرسل تقرير نشر 3 نوفمبر بالنسبة للتكرار أو Recursion هو عملية استدعاء الدالة لنفسها، و كل مرة يتم استدعاء الدالة من داخل نفسها، يتم تخصيص مساحة إضافية في الـ Stack لتخزين معلومات حول هذه الاستدعاءات، مثل المعاملات الحالية ونقطة العودة، وهذا الأمر يستهلك ذاكرة أكثر عادة، لأنه يحتاج إلى تخصيص ذاكرة جديدة في الـ Stack لكل استدعاء للدالة، وبالتالي يجعل التكرار غير ملائم في بعض الحالات التي تتطلب عمق استدعاء كبير، وقد يؤدي إلى Stack Overflow إذا تجاوز عدد الاستدعاءات الحد الأقصى المسموح به. أما الحلقات تستهلك ذاكرة أقل لأنها لا تحتاج إلى إضافة سياقات استدعاء جديدة كما يحدث في التكرار، و يمكن أن تعمل بشكل مستمر دون خوف من تجاوز ذاكرة الـ Stack، لذا من حيث استهلاك الذاكرة، الحلقات أفضل بكثير من التكرار، ولكن لكل منهما استخداماته وميزاته الخاصة حسب طبيعة المشكلة. 1 اقتباس
0 Mustafa Suleiman نشر 3 نوفمبر أرسل تقرير نشر 3 نوفمبر بالطبع تستهلك الـ Recursion كمية أكبر من الذاكرة مقارنة بالـ Loop، لأن كل استدعاء متكرر للدالة يُنشئ إطارًا جديدًا على المكدس stack. وذلك يؤدي ذلك إلى مشكلة Stack Overflow في حال كان عدد الاستدعاءات كبيرًا جدًا. والمكدس هو منطقة من الذاكرة تُستخدم لتخزين البيانات بطريقة LIFO (Last In First Out)، وتُدار تلك المنطقة من الذاكرة بواسطة وحدة المعالجة المركزية CPU بشكل تلقائي. والـ Recursion أبطأ من الـ Loop في بعض الحالات، خاصةً مع عدد الاستدعاءات الكبيرًا لأن تكلفة إنشاء إطارات المكدس وإدارتها تكون عالية. بالتالي الـ Recursion نستخدمه في حل المشكلات التي يمكن تقسيمها إلى مشكلات أصغر من نفس النوع مثل الـ Tree Traversal والـ Merge Sort. بينما الـ Loop حل المشكلات التي تتطلب تكرار مجموعة من التعليمات لعدد محدد من المرات أو حتى يتم استيفاء شرط معين مثل التكرار على قائمة والتحقق من شرط معين. 1 اقتباس
0 Ali Ahmed55 نشر 3 نوفمبر الكاتب أرسل تقرير نشر 3 نوفمبر بتاريخ 10 دقائق مضت قال Chihab Hedidi: بالنسبة للتكرار أو Recursion هو عملية استدعاء الدالة لنفسها، و كل مرة يتم استدعاء الدالة من داخل نفسها، يتم تخصيص مساحة إضافية في الـ Stack لتخزين معلومات حول هذه الاستدعاءات، مثل المعاملات الحالية ونقطة العودة، وهذا الأمر يستهلك ذاكرة أكثر عادة، لأنه يحتاج إلى تخصيص ذاكرة جديدة في الـ Stack لكل استدعاء للدالة، وبالتالي يجعل التكرار غير ملائم في بعض الحالات التي تتطلب عمق استدعاء كبير، وقد يؤدي إلى Stack Overflow إذا تجاوز عدد الاستدعاءات الحد الأقصى المسموح به. أما الحلقات تستهلك ذاكرة أقل لأنها لا تحتاج إلى إضافة سياقات استدعاء جديدة كما يحدث في التكرار، و يمكن أن تعمل بشكل مستمر دون خوف من تجاوز ذاكرة الـ Stack، لذا من حيث استهلاك الذاكرة، الحلقات أفضل بكثير من التكرار، ولكن لكل منهما استخداماته وميزاته الخاصة حسب طبيعة المشكلة. اه يعني مش كل حاجه Recursion هو ليه حالات معينه ولكن هو مفيد جدا سواء في الخوزرميه او الرياضيات المقطعيه بتاريخ 7 دقائق مضت قال Mustafa Suleiman: مشكلة Stack Overflow بس المشكله دي ممكن تحصل مع لغات عالي المستوي زي بايثون والا بس مع لغه سي او سي++ اقتباس
0 Chihab Hedidi نشر 3 نوفمبر أرسل تقرير نشر 3 نوفمبر بتاريخ 3 دقائق مضت قال Ail Ahmed: اه يعني مش كل حاجه Recursion هو ليه حالات معينه ولكن هو مفيد جدا سواء في الخوزرميه او الرياضيات المقطعيه بس المشكله دي ممكن تحصل مع لغات عالي المستوي زي بايثون والا بس مع لغه سي او سي++ بالضبط التكرار فعلا له حالات معينة يكون فيها أكثر فعالية أو سهولة في التعبير عن الحل، وخاصة في مسائل الخوارزميات والرياضيات المقطعية، ولكن ليس كل شيء يمكن حله بكفاءة باستخدام التكرار، خاصة في المسائل التي تتطلب عمق استدعاء كبير، لذا يفضل التفكير في التوازن بين الأداء وسهولة الفهم عند اختيار التكرار أو الحلقات. بتاريخ 7 دقائق مضت قال Ail Ahmed: بتاريخ 14 دقائق مضت قال Mustafa Suleiman: مشكلة Stack Overflow أما مشكلة Stack Overflow يمكن أن تحدث في جميع اللغات، سواء كانت لغات عالية المستوى مثل بايثون أو لغات منخفضة المستوى مثل C وC++، لأنها تتعلق بالذاكرة المتاحة في الـ Stack، وهي جزء من ذاكرة النظام المخصص لاستدعاءات الدوال، سواء في بايثون أو في C/C++ أو أي لغة تدعم التكرار العميق. 1 اقتباس
0 عبد الوهاب بومعراف نشر 3 نوفمبر أرسل تقرير نشر 3 نوفمبر الفرق الرئيسي بين recursion وloop يكمن في كيفية تنفيذ التكرار فالحلقات تستخدم بنية تحكم لتكرار كتلة من التعليمات البرمجية بشكل مباشر، بينما recursion يحقق التكرار عن طريق استدعاء الدالة نفسها من داخلها. هذا يؤدي إلى اختلافات مهمة في الأداء واستهلاك الذاكرة. الحلقات يمكن اعتبارها مناسبة للمهام التكرارية البسيطة حيث يكون الأداء هو الاعتبار الرئيسي أما recursion فهو مناسب للمشاكل التي يمكن تقسيمها إلى نسخ أصغر من نفسها مثل عمليات البحث في الأشجار مثلا لكن الاعتماد على أيّ منها يعتمد على طبيعة المشكلة والمتطلبات الخاصة بالمشروع ففي كثير من الأحيان يمكن تحويل recursion إلى حلقات والعكس صحيح، ولكن يجب مراعاة تأثير ذلك على الأداء واستهلاك الذاكرة. 1 اقتباس
السؤال
Ali Ahmed55
السلام عليكم
يعني من حيث الذكرا مين بيستهلك اكثر ؟
7 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.