ØØ§Ù اÙÙÙØª ÙÙØ¹Ùد Ø§ÙØ£Ù Ø¥ÙÙ Ø§ÙØ¯Ùا٠ÙÙØªØ¹Ù Ù ÙÙ Ø¯Ø±Ø§Ø³ØªÙØ§
Ù ÙØ¶ÙØ¹ÙØ§ Ø§ÙØ£Ù٠سÙÙÙÙ Ø§ÙØªÙرار
Ø¥Ù Ù٠تÙÙ Ø¬Ø¯ÙØ¯Ø§Ù Ø¨Ù Ø¬Ø§Ù Ø§ÙØ¨Ø±Ù جة, إذ٠٠٠اÙÙ ØØªÙ ٠أÙ٠٠أÙÙ٠باÙÙØ³Ø¨Ø© ÙÙ ÙÙÙ ÙÙÙ ØªØ®Ø·Ù ÙØ°Ø§ اÙÙØµÙ
Ø§ÙØªÙرار ÙÙ ÙÙ Ø· بر٠جة Ù ÙÙØ¯ ÙÙ Ø§ÙØØ§ÙØ§Øª Ø§ÙØªÙ ÙÙ ÙÙ ÙÙÙØ§ ØªÙØ³Ù٠اÙÙ ÙÙ Ø© بشÙÙ Ø·Ø¨ÙØ¹Ù Ø¥Ù٠عدة Ù ÙØ§Ù ٠٠اÙÙÙØ¹ ÙÙØ³Ù ÙÙ٠أبسط Ø£Ù Ø¹ÙØ¯Ù ا ÙÙ ÙÙ ØªØ¨Ø³ÙØ· Ù ÙÙ Ø© ٠ا Ø¥Ù٠إجراء سÙÙ Ø¨Ø§ÙØ¥Ø¶Ø§ÙØ© Ø¥Ù٠بدÙ٠أبسط ÙÙÙØ³ اÙÙ ÙÙ Ø© Ø£Ù Ù٠ا Ø³ÙØ±Ù ÙØ±ÙباÙ, ÙÙØªØ¹Ø§Ù ٠٠ع بÙÙØ© Ø¨ÙØ§Ùات ٠عÙÙØ©
ÙØ¹Ùد٠ا تÙÙÙ Ø¥ØØ¯Ù Ø§ÙØ¯Ùا٠بØÙ Ù ÙÙ Ø© ٠ا, ÙÙ ÙÙ Ø£Ù ØªÙØ§Ø¯Ù بداخÙÙØ§ Ø¯ÙØ§Ù Ø£Ø®Ø±Ù ÙØ«Ùرة. Ù٠٠اÙÙ Ù ÙÙ Ø§ÙØ¶Ø§Ù Ø£Ù ØªÙØ§Ø¯Ù Ø§ÙØ¯Ø§ÙØ© عÙÙ ÙÙØ³Ùا. ذÙ٠٠ا ÙØ¹Ø±Ù Ø¨Ø¥Ø³Ù Ø§ÙØªÙرار.
طرÙÙØªØ§Ù ÙÙØªÙÙÙØ±
ÙÙØ¨Ø¯Ø£ بÙ
Ø«Ø§Ù ØµØºÙØ± ÙÙØ¶Ø اÙÙÙØ±Ø© â Ø¯Ø¹Ùا ÙÙØªØ¨ Ø¯Ø§ÙØ© pow(x, n) Ø§ÙØªÙ ØªØ±ÙØ¹ x Ø¥ÙÙ Ø§ÙØ£Ùس n, أ٠بÙ
عÙ٠أخر تضرب x ÙÙ ÙÙØ³Ù عدد n Ù
٠اÙÙ
رات
pow(2, 2) = 4;
pow(2, 3) = 8;
pow(2, 4) = 16;
ÙÙØ§Ù طرÙÙØªØ§Ù ÙØªØÙÙ٠ذÙÙ
-
Ø§ÙØªÙÙÙØ± Ø§ÙØªÙرار٠âIterativeâ: ØÙÙØ©
for:function pow(x, n) { let result = 1; // multiply result by x n times in the loop for (let i = 0; i < n; i++) { result *= x; } return result; } alert(pow(2, 3)); // 8 -
Ø§ÙØªÙÙÙØ± اÙÙ ØªÙØ±Ø± âRecursiveâ: ØªØ¨Ø³ÙØ· اÙÙ ÙÙ Ø© ÙØªÙØ±Ø§Ø±ÙØ§ :
```js run function pow(x, n) { if (n == 1) { return x; } else { return x * pow(x, n - 1); } } alert( pow(2, 3) ); // 8 ```ÙØ¬Ø¨ Ù ÙØ§ØØ¸Ø© ÙÙ٠أ٠اÙÙ ØªØºÙØ± اÙÙ ØªÙØ±Ø± ٠ختÙ٠جÙÙØ±ÙاÙ
Ø¹ÙØ¯Ù
ا ÙØªÙ
استدعاء pow(x, n), Ø§ÙØªÙÙÙØ° ÙÙÙØ³Ù
Ø¥ÙÙ ÙØ±Ø¹ÙÙ :
if n==1 = x
/
pow(x, n) =
\
else = x * pow(x, n - 1)
-
إذا ÙØ§Ù
n == 1, إذ٠Ù٠ش٠بدÙÙÙ. ذÙÙ ÙØ³Ù Ù ÙØ§Ø¹Ø¯Ø© Ø§ÙØªÙرار, ÙØ£Ù٠عÙ٠اÙÙÙØ± ÙØ¹Ø·Ù Ø§ÙØÙ Ø§ÙØ¨Ø¯ÙÙÙ :pow(x, 1)تساÙÙx. -
ÙÙ٠ا عدا ذÙÙ, ÙÙ ÙÙÙØ§ Ø£Ù ÙØ¹ØªØ¨Ø±
pow(x, n)Ø£ÙÙØ§x * pow(x, n - 1). ÙÙ Ø§ÙØ±Ùاضات, ÙÙØªØ¨ ÙØ°Ø§ Ø§ÙØªØ¹Ø¨Ùر عÙÙ ÙØ°Ø§ Ø§ÙØ´ÙÙxn = x * xn-1. ÙØ°Ø§ ÙØ³Ù ٠ب٠*Ø®Ø·ÙØ© ØªÙØ±Ø§Ø±ÙØ©* : ÙØÙ ÙØÙ٠اÙÙ ÙÙ Ø© Ø¥ÙÙ Ù ÙÙ Ø© أصغر ( Ø§ÙØ¶Ø±Ø¨ ÙÙx) Ù Ù ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙØ© بشÙ٠أبسط (powب٠ÙÙÙ Ø© أصغر ÙÙÙn) ÙØ§ÙØ®Ø·ÙØ© Ø§ÙØªØ§ÙÙØ© تبسط Ø§ÙØ¯Ø§ÙØ© Ø£ÙØ«Ø± ÙØ£Ùثر ØØªÙ تصÙnØ¥ÙÙ1.
ÙØ³ØªØ·Ùع Ø£Ù ÙÙÙÙ Ø£ÙØ¶Ø§Ù Ø£Ù pow ØªÙØ±Ø± Ù
ÙØ§Ø¯Ø§Ø© ÙÙØ³Ùا ØØªÙ تص٠n == 1.
عÙ٠سبÙ٠اÙÙ
ثاÙ, ÙØØ³Ø§Ø¨ pow(2, 4) اÙÙ
ØªØºÙØ± اÙÙ
ØªÙØ±Ø± ÙÙÙÙ
Ø¨ÙØ°Ù Ø§ÙØ®Ø·Ùات:
pow(2, 4) = 2 * pow(2, 3)pow(2, 3) = 2 * pow(2, 2)pow(2, 2) = 2 * pow(2, 1)pow(2, 1) = 2
ÙØ°ÙÙ, Ø§ÙØªÙرار ÙÙÙØµ Ù ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙØ© Ø¥ÙÙ Ø¯Ø§ÙØ© ابسط ث٠أبسط ÙÙÙØ°Ø§ ØØªÙ ØªØµØ¨Ø Ø§ÙØ¥Ø¬Ø§Ø¨Ø© ÙØ§Ø¶ØØ© ÙÙØµÙ Ø¥ÙÙ ÙØ§Ø¹Ø¯Ø© Ø§ÙØªÙرار.
Ø§ÙØÙ Ø§ÙÙ ØªÙØ±Ø± âRecursiveâ Ø¯Ø§Ø¦Ù Ø§Ù Ø£ÙØµØ± Ù Ù Ø§ÙØªÙرار٠âIterativeâ.
ÙÙØ§ ÙÙ
ÙÙÙØ§ إعادة ÙØªØ§Ø¨Ø© pow(x, n) بإستخداÙ
Ø§ÙØ¹Ø§Ù
٠اÙÙ
Ø´Ø±ÙØ· ? Ø¨Ø¯ÙØ§Ù Ù
Ù if ÙÙØ¬Ø¹ÙÙØ§ Ø£ÙØ«Ø± Ø§Ø®ØªØµØ§Ø±Ø§Ù Ù ÙØ±Ø§Ø¡Ù
function pow(x, n) {
return (n == 1) ? x : (x * pow(x, n - 1));
}
Ø§ÙØ¹Ø¯Ø¯ Ø§ÙØ£Ùص٠ÙÙÙ
ÙØ§Ø¯Ø§Ùات اÙÙ
ØªØ¯Ø§Ø®ÙØ© بÙ
ا ÙÙÙÙ
اÙÙ
ÙØ§Ø¯Ø§Ø© Ø§ÙØ£ÙÙÙ ÙØ³Ù
٠عÙ
Ù Ø§ÙØªÙرار ÙÙ ØØ§ÙØªÙØ§ سÙÙÙÙ n.
Ø§ÙØØ¯ Ø§ÙØ£ÙØµÙ ÙØ¹Ù Ù Ø§ÙØªÙرار ÙØØ¯Ø¯Ù Ù ØØ±Ù Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت. ÙÙ ÙÙÙØ§ Ø£Ù ÙØ¹ØªÙ د عÙ٠أÙÙ 10000, بعض اÙÙ ØØ±Ùات ØªØ³Ù Ø Ø¨Ø£ÙØ«Ø± ٠٠ذÙÙ ÙÙÙ 100000 ØºØ§ÙØ¨Ø§Ù خارج ÙØ·Ø§Ù ٠عظ٠ÙÙ . ÙÙÙØ§Ù ØªØØ³ÙÙØ§Øª تÙÙØ§Ø¦ÙØ© تساعد عÙÙ Ø§ÙØªØ®ÙÙÙ Ù Ù ØØ¯Ø© ÙØ°Ø§ (âtail calls optimizationsâ), ÙÙÙÙ ÙÙ ÙØØµÙÙØ§ بعد عÙÙ Ø§ÙØ¯Ø¹Ù ÙÙ ÙÙ Ù ÙØ§Ù ÙÙØ¹Ù ÙÙÙ ÙÙ ØØ§Ùات Ø¨Ø³ÙØ·Ø© ÙÙØ·.
ÙØ°Ø§ Ø§ÙØ¹Ùب ÙØØ¯ ٠٠تطبÙÙØ§Øª Ø§ÙØªÙرار âRecursionâ, ÙÙÙÙÙ ÙØ¸Ù ÙÙ Ø¥ÙØªØ´Ø§Ø± ÙØ§Ø³Ø¹ جداÙ. ÙÙÙØ§Ù Ø§ÙØ¹Ø¯Ùد ٠٠اÙÙ ÙØ§Ù ØªØØªØ§Ø¬ طرÙÙØ© Ø§ÙØªÙÙÙØ± اÙÙ ØªÙØ±Ø±Ø© ÙØ¥Ø¹Ø·Ø§Ø¦Ù ÙÙØ¯ أبسط ÙØ£Ø³ÙÙ.
Ø³ÙØ§Ù Ø§ÙØªÙÙÙØ° âExecution contextâ ٠اÙÙÙÙ Ø© âStackâ
Ø§ÙØ£Ù دعÙÙØ§ ÙÙØØµ ÙÙ٠تع٠٠اÙÙ ÙØ§Ø¯Ø§Ùات اÙÙ ØªÙØ±Ø±Ø©. ÙÙÙØ¸Ø± ÙÙØ¬Ø§Ùب اÙÙ ØØ¬Ùب ع٠عÙÙÙÙØ§ ÙÙØ¯ÙاÙ
اÙ٠عÙÙ٠ات Ø§ÙØªÙ تخص ع٠ÙÙØ© تÙÙÙØ° Ø§ÙØ¯Ø§ÙØ© تخز٠Ù٠شئ ÙØ¯Ø¹Ù Ø³ÙØ§Ù Ø§ÙØªÙÙÙØ°.
Ø³ÙØ§Ù Ø§ÙØªÙÙÙØ° Ù٠بÙÙØ© Ø¨ÙØ§Ùات داخÙÙØ© تشÙ
Ù ØªÙØ§ØµÙ٠ع٠تÙÙÙØ° Ø§ÙØ¯Ø§ÙØ© Ù
Ø«Ù: Ù
٠أ٠Ù
ÙØ§Ù تÙ
ت Ù
ÙØ§Ø¯Ø§Ø© ÙØ°Ù Ø§ÙØ¯Ø§ÙØ© , ٠اÙÙÙÙ
Ø© Ø§ÙØØ§ÙÙØ© ÙÙÙ
ØªØºÙØ± this (ÙØÙ ÙØ§ ÙØ³ØªØ®Ø¯Ù
ÙØ§ ÙÙØ§) ٠بعض Ø§ÙØªÙاصÙÙ Ø§ÙØ¯Ø§Ø®ÙÙØ© Ø§ÙØ£Ø®Ø±Ù
ÙÙ ÙØ°Ø§ ÙØ¨Ø¯Ù ٠بÙ٠ا٠أÙÙØ³ ÙØ°ÙÙ.Ø Ø¯Ø¹ÙØ§ ÙØ¨Ø³Ø· Ø§ÙØ£Ù ر Ø£ÙØ«Ø±
٠ع ÙÙ Ø¯Ø§ÙØ© ÙØªÙ Ù ÙØ§Ø¯Ø§ØªÙا ÙØªÙ ØµÙØ¹ Ø³ÙØ§Ù تÙÙÙØ°Ù خاص Ø¨ÙØ§ ÙÙÙØ³Ø¨ ÙÙØ§
ÙÙÙ Ø¹ÙØ¯Ù ا ÙØªÙ Ù ÙØ§Ø¯Ø§Ø© Ø¯Ø§ÙØ© أخر٠بداخÙÙØ§, ÙØØ¯Ø« Ø§ÙØ£ØªÙ:
- ÙØªÙ Ø¥ÙÙØ§Ù Ø§ÙØ¯Ø§ÙØ© Ø§ÙØØ§ÙÙØ©
- Ø§ÙØ³ÙØ§Ù Ø§ÙØªÙÙÙØ°Ù ÙÙØ°Ù Ø§ÙØ¯Ø§ÙØ© ÙØªÙ تخزÙÙÙ Ù٠بÙÙØ© Ø¨ÙØ§Ùات خاصة تدع٠ÙÙÙ Ø© Ø§ÙØ³Ø§ÙÙ Ø§ÙØªÙÙÙØ°Ù âexecution context stackâ
- بدأ تÙÙÙØ° Ø§ÙØ¯Ø§ÙØ© Ø§ÙØªÙ ت٠ت Ù ÙØ§Ø¯Ø§ØªÙا بداخÙÙØ§
- بعد Ø¥ÙØªÙاء Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ© Ù Ù Ø§ÙØªÙÙÙØ° ÙØªÙ إسترجاع Ø§ÙØ³ÙØ§Ù Ø§ÙØªÙÙÙØ°Ù Ø§ÙØ°Ù ت٠تخزÙÙÙ Ù٠اÙÙÙÙ Ø© âStackâ, Ø«Ù ØªØ¹ÙØ¯ ÙÙ ÙØ§ØµÙØ© تشغÙÙ Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© Ù Ù Ø¹ÙØ¯ ÙÙØ·Ø© Ø§ÙØ¥ÙÙØ§Ù
Ø¯Ø¹ÙØ§ Ø§ÙØ£Ù ÙØ±Ù Ù
اذا ØØ¯Ø« Ø£Ø«ÙØ§Ø¡ Ù
ÙØ§Ø¯Ø§Ø© pow(2, 3)
pow(2, 3)
ÙÙ Ø¨Ø¯Ø§ÙØ© Ù
ÙØ§Ø¯Ø§Ø© pow(2, 3) Ø§ÙØ³ÙØ§Ù Ø§ÙØªÙÙÙØ°Ù سÙÙÙÙ
بتخزÙ٠اÙÙ
ØªØºÙØ±Ø§Øª: x = 2, n = 3, ÙØ£Ùضا٠سÙÙÙÙ
بتخزÙÙ ÙÙØ·Ø© Ø§ÙØªÙÙÙØ° Ø§ÙØªÙ ØªÙØ¬Ø¯ Ø¹ÙØ¯ Ø§ÙØ³Ø·Ø± 1 ÙÙØ¯Ø§ÙØ©
ÙÙ Ù٠رس٠٠ا ØØ¯Ø« ÙÙ ÙØ°Ø§ Ø§ÙØ´ÙÙ:
- Context: { x: 2, n: 3, at line 1 } pow(2, 3)
Thatâs when the function starts to execute. The condition n == 1 is falsy, so the flow continues into the second branch of if:
function pow(x, n) {
if (n == 1) {
return x;
} else {
return x * pow(x, n - 1);
}
}
alert( pow(2, 3) );
اÙÙ ØªØºÙØ±Ø§Øª Ù٠ا ÙÙ, ÙÙÙ Ø§ÙØ³Ø·Ø± ØªØºÙØ± ÙØ°ÙÙ Ø§ÙØ³Ùا٠سÙÙÙÙ ÙÙØ°Ø§:
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
ÙØØ³Ø§Ø¨ x * pow(x, n - 1), ÙØØªØ§Ø¬ Ø¥ÙÙ ÙØ¯Ø§Ø¡ Ø§ÙØ¯Ø§ÙØ© Ù
رة أخر٠ÙÙÙ٠بÙÙÙ
ة أصغر pow(2, 2).
pow(2, 2)
ÙÙÙ ÙØ³ØªØ·Ùع اÙÙÙØ§Ù Ø¨Ù ÙØ§Ø¯Ø§Ø© Ø¯Ø§ÙØ© داخ٠أخرÙ, ÙØ¬Ø¨ عÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت ØªØ°ÙØ± Ø§ÙØ³ÙØ§Ù Ø§ÙØªÙÙÙØ°Ù Ø§ÙØØ§ÙÙ ÙØªØ®Ø²ÙÙÙ ÙÙ ÙÙÙ Ø© Ø§ÙØ³ÙØ§Ù Ø§ÙØªÙÙÙØ°Ù ÙÙÙ ÙØ°Ø§ ÙÙÙ ÙØ³ØªØ·Ùع اÙÙ ØØ±Ù Ø§ÙØ¹Ùدة ÙÙØ¯Ø§ÙØ© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ٠رة Ø£Ø®Ø±Ù Ø¹ÙØ¯ Ø§ÙØ§ÙØªÙØ§Ø¡ Ù Ù Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ©
ÙÙØ§ ÙØÙ ÙØ§Ø¯ÙÙØ§ ÙÙØ³ Ø§ÙØ¯Ø§ÙØ© pow, ÙÙÙ ÙØ°Ø§ ÙØ§ ÙÙÙ
ÙØ£Ù Ø§ÙØ®Ø·Ùات Ø§ÙØ³Ø§Ø¨ÙØ© Ø³ÙØªÙ
تÙÙÙØ°Ùا Ù
رة أخر٠:
- Ø§ÙØ³ÙØ§Ù Ø§ÙØØ§ÙÙ Ø³ÙØªÙ تخزÙÙ٠أعÙ٠اÙÙÙÙ Ø©
- Ø³ÙØªÙ ØµÙØ¹ Ø§ÙØ³ÙØ§Ù Ø§ÙØ¬Ø¯Ùد Ø§ÙØ®Ø§Øµ Ø¨Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ©
- Ø¹ÙØ¯ Ø§ÙØ§ÙØªÙØ§Ø¡ Ù Ù Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ© â ÙØ³ØªØ¹Ùد Ø§ÙØ³ÙØ§Ù Ø§ÙØ³Ø§Ø¨Ù ÙÙØ¯Ø§ÙØ© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ٠٠اÙÙÙÙ Ø© ÙÙØ³ØªÙ٠٠تÙÙÙØ°Ù
ÙØ§ ÙÙ Ø³ÙØ§Ù اÙÙÙÙ
Ø© عÙÙ
ا ÙØ³ØªØ¯Ø¹Ù Ø§ÙØ¯Ø§ÙØ© pow(2, 2) :
- Context: { x: 2, n: 2, at line 1 } pow(2, 2)
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
Ø§ÙØ³ÙØ§Ù Ø§ÙØªÙÙÙØ°Ù Ø§ÙØ¬Ø¯Ùد سÙÙÙ٠أعÙ٠اÙÙÙÙ Ø© ÙØ¬Ù ÙØ¹ Ø§ÙØ³ÙØ§ÙØ§Øª Ø§ÙØ³Ø§Ø¨Ù ستÙÙ٠أسÙÙÙ
Ø¹ÙØ¯Ù ا ÙÙØªÙÙ Ù Ù Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ© â ÙÙÙÙ Ù Ù Ø§ÙØ³Ù٠إستعادة Ø§ÙØ³ÙØ§Ù Ø§ÙØ³Ø§Ø¨Ù ÙØ£ÙÙ ÙØØªÙØ¸ باÙÙ ØªØºÙØ±Ø§Øª Ø§ÙØ®Ø§ØµØ© Ø¨Ø§ÙØ¯Ø§ÙØ© ٠اÙÙ ÙØ§Ù اÙÙ ØØ¯Ø¯ Ø§ÙØªÙ تÙÙÙØª ÙÙÙ.
Here in the picture we use the word âlineâ, as in our example thereâs only one subcall in line, but generally a single line of code may contain multiple subcalls, like pow(â¦) + pow(â¦) + somethingElse(â¦).
ÙØ°ÙÙ ÙØ¬Ø¨ عÙÙÙØ§ Ø£Ù ÙÙÙÙ Ø£ÙØ«Ø± Ø¯ÙØ© Ù ÙÙÙÙ Ø£Ù Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© ØªØ¹ÙØ¯ ÙØ£Ø³ØªÙÙ Ø§Ù Ø§ÙØªÙÙÙØ° ٠باشرة٠بعد Ø§ÙØ§ÙØªÙØ§Ø¡ Ù Ù Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ¯Ø§Ø®ÙÙØ©.
pow(2, 1)
ØªØªÙØ±Ø± Ø§ÙØ¹Ù
ÙÙØ© Ù
رة أخرÙ: Ø¯Ø§ÙØ© أخر٠تتÙ
Ù
ÙØ§Ø¯Ø§ØªÙا Ø¹ÙØ¯ Ø§ÙØ³Ø·Ø± 5 ٠بÙÙÙ
x=2, n=1.
Ø³ÙØ§Ù تÙÙÙØ°Ù Ø¬Ø¯ÙØ¯ ÙØªÙ ØµÙØ¹Ù, ÙØ§ÙÙØ¯ÙÙ ÙØ¶Ø§Ù Ø¥Ù٠أعÙ٠اÙÙÙÙ Ø©:
- Context: { x: 2, n: 1, at line 1 } pow(2, 1)
- Context: { x: 2, n: 2, at line 5 } pow(2, 2)
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
ÙÙØ¬Ø¯ Ø§ÙØ£Ù 2 Ø³ÙØ§Ù ÙØ¯Ù
اء Ù Ø³ÙØ§Ù ÙØªÙ
تÙÙÙØ°Ù ØØ§ÙÙØ§Ù ÙÙ pow(2, 1).
Ø§ÙØ®Ø±Ùج
Ø®ÙØ§Ù تÙÙÙØ° pow(2, 1), ÙØ¹ÙÙ ØºÙØ± Ø§ÙØ¹Ø§Ø¯Ø©, Ø§ÙØ´Ø±Ø· n == 1 Ø§ÙØ£Ù Ø£ØµØ¨Ø ØµØÙØ, ÙØ°Ù٠اÙÙØ±Ø¹ Ø§ÙØ£ÙÙ if ÙØ¹Ù
Ù:
function pow(x, n) {
if (n == 1) {
return x;
} else {
return x * pow(x, n - 1);
}
}
ÙÙ
ÙØ¹Ø¯ ÙÙØ§Ù Ø¯ÙØ§Ù أخر٠ÙÙØªÙ
Ù
ÙØ§Ø¯Ø§ØªÙا, ÙØ°ÙÙ Ø³ØªÙØªÙÙ Ø§ÙØ¯Ø§ÙØ© Ø¨Ø±Ø¬ÙØ¹ 2.
Ø¹ÙØ¯Ù ا ØªÙØªÙÙ Ø§ÙØ¯Ø§ÙØ©, Ø§ÙØ³ÙØ§Ù Ø§ÙØªÙÙÙØ°Ù ÙÙØ§ ÙÙ ÙØ¹Ø¯ ÙÙ ÙØ§Ø¦Ø¯Ø© بعد Ø§ÙØ£Ù, ÙØ°ÙÙ ÙÙÙÙ Ø¨ØØ°ÙÙØ§ Ù Ù Ø§ÙØ°Ø§Ùرة. Ø«Ù ÙØ£ØªÙ Ø¨Ø§ÙØ³ÙØ§Ù Ø§ÙØ³Ø§Ø¨Ù ٠٠أعÙ٠اÙÙÙÙ Ø© :
- Context: { x: 2, n: 2, at line 5 } pow(2, 2)
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
Ø«Ù
ÙØ¹Ùد تÙÙÙØ° Ø¯Ø§ÙØ© pow(2, 2). Ø¥ÙÙØ§ تÙ
تÙÙ ÙØ§ØªØ¬ ÙØ¯Ø§Ø¡ pow(2, 1), ÙØ°ÙÙ ØªÙØªÙÙ ÙÙ Ø§ÙØ§Ø®Ø±Ù Ø¨ØªÙØ¯Ùر x * pow(x, n - 1), ÙØªØ¹Ùد Ø¨ÙØ§ØªØ¬ 4.
Ø«Ù ÙØ£ØªÙ Ø¨Ø§ÙØ³ÙØ§Ù Ø§ÙØ³Ø§Ø¨Ù:
- Context: { x: 2, n: 3, at line 5 } pow(2, 3)
Ø¹ÙØ¯Ù
ا ØªÙØªÙ٠أخر Ø¯Ø§ÙØ©, ÙØØµÙ Ø¹ÙÙ ÙØ§ØªØ¬ pow(2, 3) = 8
Ø§ÙØ¹Ù Ù Ø§ÙØªÙرار٠ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ© ÙÙÙÙ: 3.
Ù٠ا ÙÙ Ù ÙØ¶Ø ÙÙ Ø§ÙØ£Ø¹ÙÙ, Ø§ÙØ¹Ù Ù Ø§ÙØªÙØ±Ø§Ø±Ù ÙØ³Ø§ÙÙ Ø§ÙØ¹Ø¯Ø¯ Ø§ÙØ£Ùص٠ÙÙØ³ÙØ§ÙØ§Øª اÙÙ ÙØ¬Ùدة Ù٠اÙÙÙÙ Ø©
ÙØ¬Ø¨ Ù
ÙØ§ØØ¸Ø© Ù
ØªØ·ÙØ¨Ø§Øª Ø§ÙØ°Ø§Ùرة. Ø§ÙØ³ÙØ§ÙØ§Øª ØªØØªØ§Ø¬ Ø¥ÙÙ Ø°Ø§ÙØ±Ø©. Ù٠اÙÙ
Ø«Ø§Ù Ø§ÙØ°Ù ÙØ´Ø±ØÙ, Ø±ÙØ¹ عدد ÙØ£Ùس n ÙØØªØ§Ø¬ Ø¥ÙÙ Ø°Ø§ÙØ±Ø© تÙÙÙ ÙÙ n Ø³ÙØ§Ù.
Ø·Ø±Ù Ø§ÙØÙÙ٠اÙÙ
بÙÙØ© عÙÙ ØÙÙØ§Øª Ù
ث٠for,while تعتبر Ø£ÙØ«Ø± تÙÙÙØ±Ø§Ù ÙÙØ°Ø§Ùرة.
function pow(x, n) {
let result = 1;
for (let i = 0; i < n; i++) {
result *= x;
}
return result;
}
Ø§ÙØªÙرار Iterative ÙÙ Ø¯Ø§ÙØ© powÙØ³ØªØ®Ø¯Ù
Ø³ÙØ§Ù تÙÙÙØ°Ù ÙØ§ØØ¯ Ù ÙØªØºÙر ÙÙ٠اÙÙ
ØªØºÙØ±Ø§Øª i Ù result. ÙÙØ°Ø§ ÙØØªØ§Ø¬ Ø¥ÙÙ Ø°Ø§ÙØ±Ø© ØµØºÙØ±Ø© ÙØ«Ø§Ø¨ØªØ© ÙØ§ تعتÙ
د عÙ٠عدد اÙÙ n ÙÙ
ا ÙÙ
Ø£Ù Ø¯Ø§ÙØ© Ù ØªÙØ±Ø±Ø© âRecursiveâ ÙÙ ÙÙ Ø£Ù ÙØ¹Ùد ÙØªØ§Ø¨ØªÙا بطرÙÙØ© Ø§ÙØªÙرار âIterativeâ.ÙØ¯Ø§Ø¦Ù ا٠٠ا ÙÙÙÙ Ø§ÙØªÙرار Ø¨Ø¥Ø³ØªØ®Ø¯Ø§Ù Ø§ÙØÙÙØ§Øª Ø£ÙØ«Ø± ÙÙØ§Ø¡Ø©.
ÙÙ٠أØÙØ§ÙØ§Ù إعادة ÙØªØ§Ø¨Ø© Ø§ÙØ¯Ø§ÙØ© بطرÙÙØ© Ø§ÙØªÙرار ÙØ§ ÙÙÙ٠سÙÙØ§Ù Ø£Ø¨Ø¯Ø§Ù Ø®ØµÙØµØ§Ù Ø¹ÙØ¯Ù ا تÙÙÙ Ø§ÙØ¯Ø§ÙØ© Ø§ÙØ®Ø§Ø±Ø¬ÙØ© تعت٠د عÙÙ Ø£ÙØ«Ø± Ù Ù Ø¯Ø§ÙØ© داخÙÙØ© ÙØ´Ø±ÙØ· ÙØ«Ùرة ÙØ§ÙÙØ«Ùرة Ù Ù ÙØ±Ùع Ø§ÙØ´Ø±ÙØ·. ÙÙ ÙØ°Ø§ ÙØ¬Ø¹ÙÙ ÙØ§ ØªØ³ØªØ·ÙØ¹ إعادة ÙØªØ§Ø¨ØªÙا ٠رة Ø£Ø®Ø±Ù Ø¨Ø·Ø±ÙØ© Ø§ÙØÙÙØ§Øª.
Ø§ÙØ¯Ø§ÙØ© اÙÙ ØªÙØ±Ø±Ø© âRecursionâ ØªØ¹Ø·ÙÙ ÙÙØ¯ Ø£ÙØµØ± ÙØ£Ø³ÙÙ Ù٠اÙÙØ±Ø§Ø¡Ø©. ÙØ¶Ø¹ Ù٠إعتبار٠أ٠تØÙÙÙ Ø§ÙØ§Ø³ØªØ®Ø¯Ø§Ù Ø§ÙØ£Ù ث٠ÙÙØ³ Ù Ø·ÙÙØ¨Ø§Ù ÙÙ ÙÙ Ø§ÙØØ§ÙØ§Øª Ù٠بعض Ø§ÙØØ§ÙØ§Øª Ø£ÙØª ÙÙØ· ØªØ±ÙØ¯ ÙÙØ¯ Ø¬ÙØ¯Ø§Ù.
Ø§ÙØªÙÙ٠اÙÙ ØªÙØ±Ø±
٠ثا٠أخر ÙØªØ·Ø¨Ù٠عÙÙ Ø§ÙØ¯Ø§ÙØ© اÙÙ ØªÙØ±Ø±Ø© ÙÙ Ø§ÙØªÙÙ٠اÙÙ ØªÙØ±Ø± âRecursive Traversalsâ.
تخÙ٠أÙÙ ØµØ§ØØ¨ Ø´Ø±ÙØ©. ÙØ¨ÙÙØ© Ø¨ÙØ§Ùات Ø§ÙØ¹Ø§Ù ÙÙÙ Ø¨Ø§ÙØ´Ø±ÙØ© Ù Ø®Ø²ÙØ© Ø¨ÙØ°Ø§ Ø§ÙØ´ÙÙ:
let company = {
sales: [
{
name: 'John',
salary: 1000,
},
{
name: 'Alice',
salary: 1600,
},
],
development: {
sites: [
{
name: 'Peter',
salary: 2000,
},
{
name: 'Alex',
salary: 1800,
},
],
internals: [
{
name: 'Jack',
salary: 1300,
},
],
},
};
أ٠ب٠عÙ٠أخر Ø§ÙØ´Ø±ÙØ© ÙÙØ§ Ø£ÙØ³Ø§Ù
-
اÙÙØ³Ù ÙÙ ÙÙ Ø£Ù ÙØØªÙ٠عÙÙ ØªØ±ØªÙØ¨ âArrayâ ÙÙØ¹Ø§Ù ÙÙÙ Ø¨ÙØ°Ø§ اÙÙØ³Ù , عÙ٠سبÙ٠اÙÙ Ø«Ø§Ù ÙØ³Ù
salesÙ٠تÙÙ 2 Ù ÙØ¸ÙÙÙ: John Ù Alice. -
Ø£Ù ÙÙ ÙÙ ØªÙØ³Ù٠اÙÙØ³Ù اÙÙØ§ØØ¯ Ø¥Ù٠عدة Ø£ÙØ³Ø§Ù Ø£Ø®Ø±Ù Ù Ø«Ù ÙØ³Ù
developmentÙÙ ÙØ±Ø¹Ø§Ù :sitesÙinternals. ÙÙ ÙØ³Ù Ù ÙÙÙ Ù٠اÙÙ ÙØ¸ÙÙÙ Ø§ÙØ®Ø§ØµÙÙ٠بÙ. -
ÙÙ ÙÙ Ø£ÙØ¶Ø§ Ø£Ù ÙØªØ´Ø¹Ø¨ ÙÙ ÙØ³Ù Ù Ù ÙØ°Ù Ø§ÙØ£ÙØ³Ø§Ù Ø£ÙØ«Ø± ÙØ£Ùثر
Ù Ø«ÙØ§Ù ÙØ³Ù
sitesÙÙ ÙÙ Ø£Ù ÙØªØ´Ø¹Ø¨ Ù٠اÙÙ Ø³ØªÙØ¨Ù Ø¥ÙÙ ÙØ±Ù Ù Ø«ÙsiteAÙsiteB. ÙÙÙ ÙÙØ³ÙÙ ÙÙ ÙÙ ØªÙØ³ÙÙÙ Ø£ÙØ«Ø± ÙØ£Ùثر ÙÙØµØ¨Ø Ø§ÙØ£Ù ر Ù Ø«Ù Ø§ÙØ´Ø¬Ø±Ø©. ÙØ°Ø§ ÙÙØ³ باÙ٠ثا٠ÙÙÙÙ ÙØ¬Ø¨ أ٠تضع٠ÙÙ ØØ³Ø§Ø¨Ù
Ø¯Ø¹ÙØ§ ÙÙÙÙ Ø§ÙØ£Ù Ø£ÙÙØ§ ÙØ±Ùد Ø¯Ø§ÙØ© تج٠ع ÙÙØ§ ÙÙ Ø§ÙØ±Ùاتب ÙÙ ÙØ°Ù Ø§ÙØ¨ÙÙØ©. ÙÙÙ ÙÙ ÙÙÙØ§ ÙØ¹Ù ذÙÙØ
تÙÙÙØ± Ø§ÙØªÙرار âIterativeâ ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ© ÙÙØ³ سÙÙØ§Ù عÙÙ Ø§ÙØ¥Ø·ÙاÙ, ÙØ£Ù بÙÙØ© اÙÙ
ÙØ¸ÙÙÙ ÙÙØ³Øª Ø¨Ø³ÙØ·Ø©. ÙØ¯ ÙØ®Ø·Ø± بباÙ٠أÙÙØ§Ù عÙ
Ù ØÙÙØ© for ØÙÙ company ÙØ¨Ø¯Ø§Ø®ÙÙØ§ ØÙÙØ© أخر٠ØÙÙ Ø§ÙØ£ÙساÙ
اÙÙ
ÙØ¬Ùدة Ù٠اÙÙ
ستÙÙ Ø§ÙØ£ÙÙ. ÙÙÙÙ ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ© ÙØÙ ÙØØªØ§Ø¬ ØÙÙØ© Ø£Ø®Ø±Ù Ø¨Ø§ÙØ¯Ø§Ø®Ù ØÙ٠اÙÙ
ستÙÙ Ø§ÙØ«Ø§ÙÙ Ù
Ù Ø§ÙØ§ÙساÙ
Ù
ث٠sitesâ¦ ÙØ£Ùضا٠ØÙÙØ© رابعة ÙØ§ÙساÙ
اÙÙØ§Ø¯Ù
Ø© Ù٠اÙÙ
Ø³ØªÙØ¨ÙØ Ø¥Ø°Ø§ ÙØ¶Ø¹Ùا Ø«ÙØ§Ø« أ٠أربع ØÙÙØ§Øª داخ٠بعضÙÙ
ÙÙÙ Ø£Ø³ØªØ·ÙØ¹ Ø§ÙØªÙÙÙ Ø®ÙØ§Ù Ø¨ÙØ§Ùات ÙØ°Ø§ Ø§ÙØ´Ø¦ سÙÙÙ٠ذÙÙ ÙØ§Ø¨ÙساÙ.
Ø¥Ø°Ù Ø¯Ø¹ÙØ§ ÙÙÙØ± بطرÙÙØ© Ù ØªÙØ±Ø±Ø© âRecursionâ.
Ø¹ÙØ¯Ù ا ØªØ¹Ø·Ù Ø§ÙØ¯Ø§ÙØ© ÙØ³Ù ÙØªØ¬Ù ع Ø±ÙØ§ØªØ¨Ù, ÙÙØ§Ù ØØ§ÙتÙÙ Ù ØØªÙ ÙØªÙÙ:
- إ٠ا ا٠ÙÙÙÙ ÙØ³Ù Ø¨Ø³ÙØ· ÙÙØ³ ÙÙ ÙØ±Ùع ÙÙØªÙÙÙ Ù Ù ØªØ±ØªÙØ¨ âArrayâ Ù Ù Ø§ÙØ£Ø´Ø®Ø§Øµ â ØÙÙÙØ§ سÙÙÙ٠بع٠٠ØÙÙØ© تج٠ع Ø±ÙØ§ØªØ¨ ÙØ°Ø§ اÙÙØ³Ù ببساطة.
- Ø¥Ù
ا Ø£Ù ÙÙÙÙ ÙØ³Ù
Ù
Ø¹ÙØ¯ ÙØªÙÙÙ Ù
٠عدد
NØ£ÙØ³Ø§Ù داخÙÙØ© â ØÙÙÙØ§ ÙÙØ±Ø± Ù ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙØ© عددN٠٠اÙ٠رات ÙÙØ¬Ù ع ÙÙ ÙØ³Ù داخÙÙ ÙÙØ£ØªÙ باÙÙØ§ØªØ¬.
Ø§ÙØØ§ÙØ© Ø§ÙØ£ÙÙÙ Ù٠أساس Ø§ÙØªÙرار, Ø§ÙØØ§ÙØ© Ø§ÙØ¨Ø¯ÙÙÙØ©, Ø¹ÙØ¯Ù ا ÙØ³ØªÙÙ ØªØ±ØªÙØ¨ array
Ø§ÙØØ§ÙØ© Ø§ÙØ«Ø§ÙÙØ© Ø¹ÙØ¯Ù ا تستÙÙ Ø§ÙØ¯Ø§ÙØ© شئ âobjectâ, ÙØ¹ØªØ¨Ø± Ø®Ø·ÙØ© Ù ØªÙØ±Ø±Ø©. تعتبر ÙØ°Ù Ø§ÙØ®Ø·ÙØ© Ù Ø¹ÙØ¯Ø© ÙÙÙ٠ع٠طرÙÙ Ø§ÙØªÙرار Ø³ÙØªÙ ØªÙØ³Ù٠اÙÙ ÙÙ Ø© Ø¥ÙÙ Ù Ù٠ات أصغر ÙØ£Ø¨Ø³Ø· ØØªÙ ÙØ°Ù اÙÙ ÙØ§Øª ÙÙ ÙÙ ØªÙØ³ÙÙ ÙØ§ ÙÙ٠ا بعض Ø¥ÙÙ Ù Ù٠ات Ø£ÙØ«Ø± ØªØ¨Ø³ÙØ·Ø§Ù ÙÙÙ Ø¹Ø§Ø¬ÙØ§Ù Ø£Ù Ø£Ø¬ÙØ§Ù Ø³ØªÙØªÙ٠اÙÙ Ù٠ات Ø¹ÙØ¯ Ø§ÙØØ§ÙØ© Ø§ÙØ£ÙÙÙ.
طرÙÙØ© Ø§ÙØÙ Ø³ØªÙÙÙ Ø¨Ø³ÙØ·Ø© ØØªÙ Ø£ÙÙ ØªØ³Ø·ÙØ¹ ÙØ±Ø£ØªÙا ٠٠اÙÙÙØ¯ ÙÙÙÙ ÙØ§:
let company = { // the same object, compressed for brevity
sales: [{name: 'John', salary: 1000}, {name: 'Alice', salary: 1600 }],
development: {
sites: [{name: 'Peter', salary: 2000}, {name: 'Alex', salary: 1800 }],
internals: [{name: 'Jack', salary: 1300}]
}
};
// The function to do the job
function sumSalaries(department) {
if (Array.isArray(department)) { // case (1)
return department.reduce((prev, current) => prev + current.salary, 0); // sum the array
} else { // case (2)
let sum = 0;
for (let subdep of Object.values(department)) {
sum += sumSalaries(subdep); // recursively call for subdepartments, sum the results
}
return sum;
}
}
alert(sumSalaries(company)); // 7700
اÙÙÙØ¯ ÙØµÙر ÙØ³Ù٠اÙÙÙÙ (ÙØ±Ø¬Ù ذÙÙ!). ÙØ°Ù ÙÙ ÙÙØ© Ø§ÙØ¯Ø§ÙØ© اÙÙ ØªÙØ±Ø±Ø©. ÙØ°Ù Ø§ÙØ¯Ø§ÙØ© ØªØ¹Ù Ù Ø§ÙØ¶Ø§Ù ٠ع أ٠عدد Ù Ù Ø§ÙØªÙرعات اÙÙ ØªØ¯Ø§Ø®ÙØ©
ÙØ§ ÙÙ Ø±Ø³Ù Ø¨ÙØ§ÙÙ ÙÙØ¶Ø ÙÙÙ ØªØªÙ Ù ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙØ© Ù٠ا بداخÙÙØ§.
ÙÙ
ÙÙ Ø£Ù ÙØ³ØªØ´Ù اÙÙ
بدأ Ù
Ù Ø®ÙØ§Ù Ù
ا سبÙ: Ù٠شئ object {...} ÙØ¹ØªØ¨Ø± ÙØ¯Ø§Ø¡ ÙØ¯Ø§ÙØ© أخرÙ, بÙÙÙ
ا ÙÙ ØªØ±ØªÙØ¨ arrays [...] ÙØ¹ØªØ¨Ø± Ø£Ø·Ø±Ø§Ù ÙØ´Ø¬Ø±Ø© Ø§ÙØªÙرار ÙÙØ°Ø§ Ù٠اساس Ø§ÙØªÙرار Ø§ÙØ°Ù ÙØ¹Ø·ÙÙØ§ Ø§ÙØÙ Ø¹Ù٠اÙÙÙØ±.
ÙØ§ØØ¸ أ٠اÙÙÙØ¯ ÙØ³ØªØ®Ø¯Ù بعض Ø§ÙØ³Ù ات Ø§ÙØ°ÙÙØ© Ø§ÙØªÙ ت٠شرØÙا ÙÙ٠ا سبÙ:
Note that the code uses smart features that weâve covered before:
- طرÙÙØ©
arr.reduceت٠شرØÙا ÙÙ ÙØµÙ ØªÙØ§Ø¨Ø¹ اÙ٠صÙÙÙØ§Øª (Array methods) ÙÙØØµÙ٠عÙÙ Ù Ø¬Ù ÙØ¹ Ø§Ø±ÙØ§Ù Ø¯Ø§Ø®Ù ØªØ±ØªÙØ¨. - ØÙÙØ©
for(val of Object.values(obj))ÙÙØªÙرار عÙ٠عدد ÙÙ٠شئ:Object.valuesÙÙØ¹Ø·Ù ØªØ±ØªÙØ¨ بÙÙ٠أ٠ب٠عÙ٠أخر تØÙÙÙ ÙÙÙ Ø§ÙØ´Ø¦ Ø¥ÙÙ ØªØ±ØªÙØ¨ Array.
اÙÙÙØ§Ù٠اÙÙ ØªÙØ±Ø±Ø©
ÙÙÙÙ Ø§ÙØ¨ÙØ§ÙØ§Øª Ø§ÙØªÙØ±Ø§Ø±ÙØ© ÙÙ ÙÙÙÙ (بÙÙØ©) ÙÙØ±Ø± ÙÙØ³Ù Ù٠أجزاء أصغر Ù ÙÙ.
ÙÙØ¯ رأÙÙØ§ ÙÙØªÙ ÙØ°Ø§ عÙÙ ÙÙÙÙ Ø§ÙØ´Ø±ÙØ©.
Ø§ÙØ´Ø±ÙØ© اÙÙØ³Ù ÙØ¹ØªØ¨Ø±:
- إ٠ا ØªØ±ØªÙØ¨ Array Ù Ù Ø§ÙØ£Ø´Ø®Ø§Øµ.
- أ٠شئ object Ù٠تÙÙ Ø£ÙØ³Ø§Ù أخرÙ
ÙØ§Ù٠باÙÙØ³Ø¨Ø© ÙÙ Ø·ÙØ±Ù٠اÙÙÙØ¨ ÙÙØ§Ù Ø£Ù Ø«ÙØ© Ø£ÙØ¶Ù ÙØ£Ø´Ùر Ø¨ÙØ«Ùر ٠ث٠HTML Ù XML documents.
ÙÙ ÙØ«ÙÙØ© اÙÙ HTML-tag, HTML ÙÙ ÙÙ Ø£Ù ÙØØªÙ٠عÙ٠أ٠شئ Ù Ù ÙØ°Ù Ø§ÙØ£Ø´Ùاء:
- Ø¬Ù Ù ÙØµÙØ©.
- تعÙÙÙØ§Øª HTML.
- HTML-tag أخر٠(Ø§ÙØªÙ ØªØØªÙ٠عÙÙ Ø¬Ù Ù ÙØµÙةأ٠تعÙÙÙØ§Øª Ø£Ù HTML-tag أخر٠ÙÙÙØ°Ø§ )
ÙØ°Ø§ اÙÙÙÙÙ ÙØ§ ÙØ°ÙØ±Ù Ø¨Ø´Ø¦Ø ÙØ¹Ù Ø£ÙÙ Ù٠ثاÙÙØ§Ù تعرÙÙ Ù ØªÙØ±Ø±.
ÙÙÙ ÙÙÙÙ Ø£ÙØ«Ø± ÙÙØªØ¹Ù Ù, Ø³ÙØºØ·Ù Ø§ÙØ£Ù ÙØ§ØØ¯Ø© أخر٠٠٠ÙÙØ§ÙÙ Ø§ÙØªÙرار تدع٠اÙÙØ§Ø¦Ù Ø© اÙÙ ØªØµÙØ© âLinked Listâ Ø§Ùت٠٠٠اÙÙ Ù Ù٠أ٠تÙÙ٠بدÙÙØ© ÙÙØªØ±ØªÙب Array Ù٠بعض Ø§ÙØØ§ÙØ§Øª.
اÙÙØ§Ø¦Ù Ø© اÙÙ ØªØµÙØ©
تخÙ٠أÙÙØ§ ÙØ±Ùد تخزÙÙ ÙØ§Ø¦Ù Ø© ٠رتبة Ù Ù Ø§ÙØ§Ø´Ùاء objects.
Ø§ÙØ§Ø®ØªÙار Ø§ÙØ·Ø¨Ùع٠سÙÙÙÙ âØªØ±ØªÙØ¨â Array:
let arr = [obj1, obj2, obj3];
ÙÙÙ ÙÙØ§Ù Ù
Ø´ÙÙØ© Ù
ع Ø§ÙØªØ±ØªÙب. عÙ
ÙÙØ© âØ¥Ø¶Ø§ÙØ© Ø¹ÙØµØ±â Ù âØ¥Ø²Ø§ÙØ© Ø¹ÙØµØ±â Ù
ÙÙÙØ© جداÙ. Ù
Ø«ÙØ§Ù عÙ
ÙÙØ© arr.unshift(obj) Ø£Ù arr.shift() ÙØ¬Ø¨ عÙÙ Ø§ÙØªØ±ØªÙب إعادة ترÙÙÙ
ÙÙ Ø§ÙØ¹Ùاصر بعد Ù٠عÙ
ÙÙØ© Ù
ÙÙÙ
ÙØ¥Ø°Ø§ ÙØ§Ù Ø§ÙØªØ±ØªÙب ÙØ¨Ùر Ø¬Ø¯Ø§Ù ÙØ°Ù Ø§ÙØ¹Ù
ÙÙØ§Øª ستأخذ ÙÙØª.
ÙÙ Ø§ÙØªØ±ØªÙب Array Ø§ÙØ¹Ù
ÙÙØ§Øª Ø§ÙØ³ÙÙØ© ÙÙØ· ÙÙ
arr.push/pop. ÙØ£ÙÙÙ
ÙØ§ÙØØªØ§Ø¬Ùا Ø¥ÙÙ Ø§ÙØªØ±ÙÙÙ
بعدÙÙ
ÙØ£Ù٠إÙ
ا تضÙÙ Ù٠أخر Ø§ÙØªØ±ØªÙب Ø£Ù ØªØØ°Ù Ù
ÙÙ.
ÙØ¨Ø¯ÙÙ Ø£ÙØ¶Ù Ø¨ÙØ«Ùر ÙÙ ØØ§ÙØ© Ø§ÙØ¥Ø¶Ø§ÙØ© ÙØ§ÙØ¥Ø²Ø§ÙØ© ÙÙ ÙØ¨ÙÙ Ø¨ÙØ§Ùات ÙØ³Ù ٠ب٠اÙÙØ§Ø¦Ù Ø© اÙÙ ØªØµÙØ© .
تعتبر اÙÙØ§Ø¦Ù Ø© اÙÙ ØªØµÙØ© شئ Object ÙØØªÙ٠عÙÙ:
ÙÙÙ Ø©Ø§ÙØªØ§ÙÙÙÙØ°Ù تعتبر Ø®Ø§ØµÙØ© ØªØ´ÙØ± Ø¥ÙÙ Ø§ÙØ¹Ùصر Ø§ÙØªØ§ÙÙ ÙÙÙØ§Ø¦Ù Ø© اÙÙ ØªØµÙØ© Ø£ÙnullÙÙØ°Ø§ ÙØ¹Ø¨Ø± ÙÙØ§ÙØ© اÙÙØ§Ø¦Ù Ø©.
Ù Ø«ÙØ§Ù:
let list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null,
},
},
},
};
عرض Ø¨ÙØ§ÙÙ ÙÙÙØ§Ø¦Ù Ø©:
ÙÙØ¯ بدÙÙ ÙØµÙØ¹ÙØ§:
let list = { value: 1 };
list.next = { value: 2 };
list.next.next = { value: 3 };
list.next.next.next = { value: 4 };
list.next.next.next.next = null;
ÙÙØ§ ÙÙ
ÙÙ Ø£Ù ÙØ±Ù Ø¨ÙØ¶Ø Ø£Ù ÙÙØ§Ù عدة Ø£Ø´ÙØ§Ø¡ objects, ÙØØªÙÙ ÙÙ Ù
ÙÙÙ
عÙÙ ÙÙÙ
Ø© Ù Ø§ÙØªØ§ÙÙ Ø§ÙØ°Ù ÙØ´Ùر Ø¥ÙÙ Ù
ا بعدÙ. اÙÙ
ØªØºÙØ± list ÙÙ Ø§ÙØ£ÙÙ ÙÙ ÙØ°Ù Ø§ÙØ³ÙØ³ÙØ©, ÙØ°Ù٠إتباع Ø§ÙØªØ§ÙÙ Ø§ÙØ°Ù ÙØ´Ùر Ø¥ÙÙ Ø§ÙØªØ§ÙÙ ÙØ¬Ø¹ÙÙ٠أص٠إÙÙ ÙÙØ§ÙØ© Ø§ÙØ¹Ùاصر ÙØ§ÙÙØ§Ø¦Ù
Ø©.
ÙÙ ÙÙ ØªÙØ³Ù٠اÙÙØ§Ø¦Ù Ø© ÙØ¹Ø¯Ø© أجزاء ÙØªØ¬Ù ÙØ¹ÙÙ ÙØ§ØÙاÙ.
let secondList = list.next.next;
list.next.next = null;
ÙÙØ±Ø¨Ø·:
list.next.next = secondList;
ÙØ¨Ø§Ùطبع ÙÙ ÙÙÙØ§ Ø¥Ø²Ø§ÙØ© Ø£Ù Ø¥Ø¶Ø§ÙØ© Ø£Ù Ø¹ÙØµØ± ÙÙ Ø£Ù Ù ÙØ§Ù.
Ù Ø«ÙØ§Ù ÙÙ ÙØ¶Ø¹ ÙÙÙ Ø© Ø¬Ø¯ÙØ¯Ø© ÙÙ Ø¨Ø¯Ø§ÙØ© اÙÙØ§Ø¦Ù Ø©, ÙØØªØ§Ø¬ Ø¥Ù٠تعدÙ٠رأس اÙÙØ§Ø¦Ù Ø©:
let list = { value: 1 };
list.next = { value: 2 };
list.next.next = { value: 3 };
list.next.next.next = { value: 4 };
// prepend the new value to the list
list = { value: "new item", next: list };
ÙØØ°Ù ÙÙÙ
Ø© Ù
٠اÙÙ
ÙØªØµÙ ÙÙ Ù
ا عÙÙÙ ÙØ¹ÙÙ ÙØ© ØªØºÙØ± ÙÙÙ
Ø© Ø§ÙØªØ§ÙÙ ÙÙØ¹Ùصر Ø§ÙØ°Ù ÙØ³Ø¨Ù Ù
ا ØªØ±ÙØ¯ ØØ°ÙÙ:
list.next = list.next.next;
ÙØÙ Ø¬Ø¹ÙÙØ§ ÙÙØ§ list.next تتخط٠ÙÙÙ
Ø© 1 Ø¥ÙÙ ÙÙÙ
Ø© 2. Ø§ÙØ£Ù ÙÙÙ
Ø© 1 ØØ§ÙÙØ§Ù تÙ
Ø¥ÙØµØ§Ø¦Ùا Ù
Ù Ø§ÙØ³ÙØ³ÙØ©. ÙÙ ÙØ°Ø§ Ø§Ø§ÙØ¹Ùصر ÙÙ
ÙØªÙ
تخزÙÙÙ ÙÙ Ù
ÙØ§Ù أخر, أذا Ø³ÙØªÙ
Ù
سØÙ تÙÙØ§Ø¦Ùا٠Ù
Ù Ø§ÙØ°Ø§Ùرة.
عÙÙ Ø¹ÙØ³ Ø§ÙØªØ±ØªÙبات Arrays, ÙØ§ ÙÙØ¬Ø¯ إعادة ترÙÙÙ , ÙØÙ ÙØ³ØªØ·Ùع ببساطة إعادة ØªØ±ØªÙØ¨ Ø§ÙØ¹Ùاصر.
ÙÙ Ø§ÙØ·Ø¨ÙعÙ, اÙÙØ§Ø¦Ù Ø© ÙÙØ³Øª Ø¯Ø§Ø¦Ù Ø§Ù Ø£ØØ³Ù Ù Ù Ø§ÙØªØ±ØªÙبات. ÙØ¥Ùا ÙØ§Ù ÙÙ Ø§ÙØ§Ø´Ø®Ø§Øµ Ø§Ø³ØªØ®Ø¯Ù ÙØ§ اÙÙØ§Ø¦Ù Ø© ÙÙØ·.
Ø§ÙØ¬Ø§Ùب Ø§ÙØ³ÙØ¨Ù Ø§ÙØ±Ø¦Ùس٠أÙÙ ÙØ§ ØªØ³ØªØ·ÙØ¹ اÙÙØµÙ٠إÙÙ Ø¹ÙØµØ± ع٠طرÙ٠رÙÙ
Ù. ÙÙ Ø§ÙØªØ±ØªÙب ÙØ°Ø§ سÙÙ: arr[n]. ÙÙÙ Ù٠اÙÙØ§Ø¦Ù
Ø© ÙØØªØ§Ø¬ Ø¥ÙÙ Ø§ÙØ¨Ø¯Ø£ Ù
Ù Ø¨Ø¯Ø§ÙØ© اÙÙØ§Ø¦Ù
Ø© ÙÙØ°Ùب Ø§ÙØªØ§Ù٠عدد N Ù
Ù Ù
رات ÙÙØµÙ Ø¥Ù٠اخر اÙÙØ§Ø¦Ù
Ø©
ÙÙÙ ÙØ§ ÙØØªØ§Ø¬ دائ٠ا٠ÙÙ Ø«Ù ÙØ°Ù Ø§ÙØ¹Ù ÙÙØ§Øª. Ù Ø«ÙØ§Ù Ø¹ÙØ¯Ù ا ÙØØªØ§Ø¬ Ø£Ù٠٠أخر Ø¹ÙØµØ± Ù٠اÙÙØ§Ø¦Ù Ø© إذ٠ÙÙ Ù٠استخدا٠ÙÙÙÙ Ø§ÙØ¨ÙØ§ÙØ§Øª ÙØ°Ø§ deque â ÙØ°Ø§ اÙÙÙÙÙ ÙÙ ÙØÙ٠سرعة Ø¥Ø¶Ø§ÙØ© Ù ØØ°Ù Ø§ÙØ¹Ùاصر Ù Ù Ø§ÙØ·Ø±ÙÙÙ, ÙÙÙÙ ÙØ§ ÙØ³Ø§Ø¹Ø¯ÙÙ ÙÙ Ø¹ÙØ§ØµØ± اÙÙ ÙØªØµÙ.
بإختصار إذا أردت Ø§ÙØªØ¹Ø§Ù Ù Ø£ÙØ«Ø± ٠ع Ø¹ÙØ§ØµØ± اÙÙ ÙØªØµÙ استخد٠ÙÙÙÙ Ø§ÙØ¨ÙØ§ÙØ§Øª اÙÙØ§Ø¦Ù Ø© اÙÙ ØªØµÙØ© إذا اردت Ø§ÙØªØ¹Ø§Ù Ù Ø£ÙØ«Ø± ٠ع Ø¹ÙØ§ØµØ± Ø§ÙØ·Ø±ÙÙÙ Ø§ÙØ£ÙÙ Ù Ø§ÙØ£Ø®Ùر استخد٠ÙÙÙÙ Ø¨ÙØ§Ùات Ø§ÙØµÙ
ÙÙ ÙÙ Ø£ÙØ¶Ø§Ù ÙÙÙÙØ§Ø¦Ù Ø£Ù ØªØªØØ³Ù:
- ÙÙ
ÙÙ Ø£Ù ÙØ¶ÙÙ Ø®Ø§ØµÙØ© أخر٠تدعÙ
Ø§ÙØ³Ø§Ø¨ÙØ¥ÙÙ Ø¬Ø§ÙØ¨ Ø®Ø§ØµÙØ©Ø§ÙتاÙÙ.Ø§ÙØªÙ ØªØ´ÙØ± Ø¥ÙÙ Ø§ÙØ¹Ùصر Ø§ÙØ³Ø§Ø¨Ù ÙØªØ³ÙÙ٠اÙÙØµÙ٠إÙÙ Ø§ÙØ¹Ùصر Ø§ÙØ³Ø§Ø¨Ù. - Ù
٠اÙÙ
Ù
ÙÙ Ø£ÙØ¶Ø§Ù Ø¥Ø¶Ø§ÙØ© Ù
ØªØºÙØ± ÙØØªÙØ¸ ÙÙ٠بÙ
ÙØ§Ù Ø§ÙØ¹Ùصر Ø§ÙØ§Ø®Ùر ÙÙØ³Ù
Ù ÙØ°Ø§ اÙÙ
ØªØºÙØ±
ذÙÙtail. - ÙÙ Ù٠تعدÙ٠اÙÙÙÙÙ ÙÙÙØ§Ø³Ø¨ Ø¥ØØªÙاجاتÙ
Ù ÙØ®Øµ
بعض Ø§ÙØªØ¹Ø±ÙÙØ§Øª:
-
Ø§ÙØªÙرار âRecursionâ : ÙØ¹ØªØ¨Ø± تعرÙÙ Ø¨Ø±Ù Ø¬Ù Ù Ø¹ÙØ§Ù Ù ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙØ© ÙÙÙØ³Ùا. Ø§ÙØ¯Ø§ÙØ© اÙÙ ØªÙØ±Ø±Ø© ØªØ³ØªØ®Ø¯Ù ÙØÙ Ø§ÙÙ ÙØ§Ù بشÙ٠أÙÙÙ.
Ø¹ÙØ¯Ù ا ØªÙØ§Ø¯Ù Ø§ÙØ¯Ø§ÙØ© ÙÙØ³Ùا, ÙØ°Ø§ ÙØ³Ù Ù *Ø®Ø·ÙØ© Ù ØªÙØ±Ø±Ø©*. Ø§ÙØ§Ø³Ø§Ø³ ÙÙØ¯Ø§ÙØ© اÙÙ ØªÙØ±Ø±Ø© ÙØ¹ØªØ¨Ø± أبسط ØµÙØ±Ø© ÙÙØ¯Ø§ÙØ© ÙÙØ§ ÙÙ ÙÙ Ù ÙØ§Ø¯Ø§Ø© Ø§ÙØ¯Ø§ÙØ© ٠رة أخر٠ÙÙÙÙØ§ ÙØ°Ø§ Ø§ÙØ´Ø±Ø· Ø³ØªØ¸Ù Ø§ÙØ¯Ø§ÙØ© ØªÙØ§Ø¯Ù ÙÙØ³Ùا Ø¥Ù٠٠ا ÙØ§ ÙÙØ§ÙØ©. -
اÙ٠تعرÙ٠اÙÙ ØªÙØ±Ø± ÙØ¹ØªØ¨Ø± ÙÙÙÙ Ø¨ÙØ§Ùات ÙØ¹Ø±Ù ÙÙØ³Ù بÙÙØ³Ù ع٠طرÙÙ Ø§ÙØªÙرار.
Ù Ø«ÙØ§Ù اÙÙØ§Ø¦Ù Ø© اÙÙ ØªØµÙØ© ÙÙ Ù٠تعرÙÙÙØ§ عÙ٠أÙÙØ§ ÙÙÙÙ Ø¨ÙØ§Ùات تتÙÙ٠٠٠شئ object ÙØ´Ùر Ø¥Ù٠اÙÙØ§Ø¦Ù Ø© ÙÙØ³Ùا.
list = { value, next -> list }Ø§ÙØ´Ø¬Ø± Ù Ø«Ù Ø¹ÙØ§ØµØ± اÙÙ HTML Ø£Ù Ø§ÙØ£Ùسا٠٠ث٠٠ا Ø°ÙØ±Ùا أعÙÙ ÙØ°Ø§ اÙÙØµÙ.
Ø£Ù Ø¯Ø§ÙØ© Ù ØªÙØ±Ø±Ø© ÙÙ ÙÙ ÙØªØ§Ø¨ØªÙا Ø£ÙØ¶Ø§Ù بشÙÙ âIterativeâ. ÙØ£ØÙØ§ÙØ§Ù ÙØØªØ§Ø¬ Ø¥ÙÙ ØªØØ³ÙÙ. ÙÙÙÙ Ù٠بعض Ø§ÙØØ§ÙØ§Øª Ø§ÙØÙ Ø§ÙÙ ØªÙØ±Ø± ÙÙ Ø£ØØ³Ù ÙØ£Ø³ÙÙ ÙÙØ§ÙØ© ÙØªØ³ØªØ®Ø¯Ù Ù.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)