الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دالة Ackermann recursive تجعل الكود لا يعمل The connection was reset

بدأه youssefchou في 25 أغسطس 2011 · 2 رد · 481 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا مبتدئ PHP مستوى الدوال

قمت بكتابة دالة ackermann recursive

<?php
function Ackermann($m,$n)
{
if(m==0 AND n>0)
	return n + 1;
else if(n==0 and m>0)
	return Ackermann(m-1,1);
else
	return Ackermann(m-1,Ackermann(m,n-1));
}

echo Ackermann(3,4);	

?>

ولكن عندما اقوم بتشغيل الكود عبر المتصفح ينقطع الاتصال

connection interumpted by the server

شكرا

تم تعديل هذه المشاركة بواسطة youssefchou في 26 أغسطس 2011 في 01:56

#2

السلام عليكم.

الكود الصحيح إن شاء الله تعالى:

<?php
function Ackermann($m,$n)
{
if($m==0 AND $n>0)
    	return $n + 1;
else if($n==0 and $m>0)
    	return Ackermann($m-1,1);
else
    	return Ackermann($m-1,Ackermann($m,$n-1));
}

echo Ackermann(3,4);	

?>

سبب الخطأ الوحيد ببساطة، هو أن المتغيرات في PHP تسبق أسماؤها بعلامة $. و في الكود الذي وضعتَه، تم استخدام العلامة المذكورة مرات، و مرات لم يتم استخدامها. و عندم عدم كتابة علامة $ الذي يحدث أن PHP يعتبر أنك تريد أن تتعامل مع ثابت لا متغير، فإذا لم يجد ثابت تحت هذا الاسم، ببساطة أصبح نصًا!!

و بالتالي يتم مقارنة n و m على أنهم نصوص، و عند المقارنة مع رقم، يحولون إلى أرقام أي ببساطة 0، و لهذا السبب حدثت المشكلة الآتية: أصبحت الـRecursion مستمرًا بلا نهاية، لهذا ظهر لك الخطأ!

شكرًا.

#3

بارك الله فيك اخي sitesmaker

فعلا يبدو انني لم اتملص بعد من قواعد البرمجة بلغة سي :blink:

لم افكر ابدا في امكانية كون الدالة تعمل لما لا نهاية لان الخطأ الذي اعرفه ينتج عن مثل هذا الامر هو

Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\while.php on line 5

وبالتالي كوني لا ارى هذا الخطأ اعتقدت ان الدالة تنتهي فعلا

شكرا, الكود الان يعمل

وجزاك الله خيرا

تم تعديل هذه المشاركة بواسطة youssefchou في 26 أغسطس 2011 في 07:36

مواضيع مشابهة