العودية جافا سكريبت

تعلم أساسيات Recursion في JavaScript

يمكن للدالة أن تستدعي نفسها.

هذا ما تعنيه العودية. ويتيح لنا حل المشكلات بطريقة مرتبة.

للقيام بذلك ، تحتاج إلى تعبير دالة مسمى ، وبعبارة أخرى هذا:

function doSomething() {

}

حتى نتمكن من الاتصالdoSomething()داخلdoSomething().

The simplest example we can make is calculating a factorial of a number. This is the number that we get by multiplying the number for (number - 1), (number - 2), and so on until we reach the number 1.

مضروب 4 هو (4 * (4-1) * (4-2) * (4-3)) = 4 * 3 * 2 * 1 ، وهو 24.

يمكننا إنشاء دالة تكرارية لحسابها تلقائيًا:

function factorial(n) {
  return n >= 1 ? n * factorial(n - 1) : 1
}

factorial(1) //1 factorial(2) //2 factorial(3) //6 factorial(4) //24

يمكننا أيضًا استخدام دالة السهم إذا فضلنا:

const factorial = (n) => {
  return n >= 1 ? n * factorial(n - 1) : 1
}

factorial(1) //1 factorial(2) //2 factorial(3) //6 factorial(4) //24

حان الوقت الآن للتحدث عنمكدس المكالمات.

تخيل أننا ارتكبنا خطأ ، وبدلاً من حساب العامل كـ

const factorial = (n) => {
  return n >= 1 ? n * factorial(n - 1) : 1
}

نحن نفعل هذا:

const factorial = (n) => {
  return n >= 1 ? n * factorial(n) : 1
}

كما ترون ، نحن نتصلfactorial(n)لا نهاية. ليس هناك نهاية ، لأننا نسينا خفضها في كل مكالمة.

إذا قمت بتشغيل هذا الرمز ، فستتلقى هذا الخطأ:

RangeError: Maximum call stack size exceeded

Every time a function is invoked, JavaScript needs to remember the current context before switching to the new one, so it puts that context on the call stack. As soon as the function returns, JavaScript goes to the call stack and picks the last element that was added, and resumes its execution.

Maximum call stack size exceeded means that too many elements were put on the stack, and your program crashed.


More js tutorials: