JS:
function func(num) { if(num<=1) { return 1; } else { return num * func(num-1); } }
הסבר כללי על רקורסיה: רקורסיה זו דרך לשמור כמות דינמית של משתנים בזכרון בצורה מסובכת יותר, במקום להשתמש במערך למשל, אתה משתמש במחסנית הקריאות (שם נשמרים הפרמטרים שנשלחים לפונקציות) וכל פעם שאתה קורא לפונקציה נוספת מבלי שסיימת את הנוכחית, הפרמטרים של הפונקציה הנוכחית נקברים עמוק יותר בתוך המחסנית ע"י הפרמטרים של הפונקציה החדשה שקראת לה. הסבר על הרקורסיה הזאת: אז ככה, כשאתה קורא לfunc ושולח לה X, אז num שווה לX הזה, במידה והפונקציה מגיעה לelse אז נעשית קריאה נוספת לפונקציה הזאת עם X-1, ואז הפונקציה הנוכחית "קופאת בזמן", כלומר כלום לא קורה בה עד שהקריאה שהיא עשתה תחזור, והnum שלה נשאר שווה לX, ואז מתחילה לרוץ כאילו פונקציה נוספת (זה שזאת למעשה אותה הפונקציה לא משנה לחלוטין למחשב) שהnum שלה שווה לX-1, ושוב אם היא מגיעה לelse אז תקראה כמה שורות למעלה (כי קורה שוב אותו הדבר רק עם X-2). עד כאן תהליך הכניסה לרקורסיה, למעשה מה שיש לנו עד שnum הגיע ל1 זה הרבה פונקציות "קפואות בזמן" שמחכות לפונקציה שהן קראו לה (שהיא עצמן למעשה רק עם פרמטר אחר), ועכשיו לתהליך היציאה מהרקורסיה. num עכשיו שווה 1 הif מתבצע, כלומר מוחזר 1. הפונקציה שקראה לזאת, עכשיו קיבלה ממנה תשובה (1) ולכן יכול להמשיך את הביצוע, היא כופלת את ה1 הזה בnum שלה שהוא שווה ל2 ומחזירה את התוצאה (2). ושוב עוד שלב אחד החוצה, הפונקציה שהמתינה לסיומה קיבלה תשובה (2) אז היא ממשיכה בביצוע, וכופלת את ה2 בnum שלה שהוא 3 ומחזירה את התוצאה וכן הלאה, עד שמגיעים לשכבה החיצונית ביותר וזאת בעצם התוצאה של העצרת. אני מקווה שהבנת, אם לא תשאל ונמשיך.