यहां हम देखेंगे कि कैसे रिकर्सिव फंक्शन कॉल के लिए सहायक स्थान की आवश्यकता होती है। और यह सामान्य फंक्शन कॉल से किस प्रकार भिन्न है?
मान लीजिए कि हमारे पास नीचे जैसा एक कार्य है -
long fact(int n){ if(n == 0 || n == 1) return 1; return n * fact(n-1); }
यह फ़ंक्शन रिकर्सिव फ़ंक्शन है। जब हम इसे लाइक फैक्ट(5) कहते हैं, तो यह स्टैक के अंदर पतों को नीचे की तरह स्टोर करेगा -
fact(5) ---> fact(4) ---> fact(3) ---> fact(2) ---> fact(1)
चूंकि पुनरावर्ती कार्य स्वयं को बार-बार कॉल कर रहे हैं, पतों को स्टैक में जोड़ दिया जाता है। इसलिए यदि फ़ंक्शन को n बार पुनरावर्ती कहा जाता है, तो यह O(n) सहायक स्थान लेगा। लेकिन इसका मतलब यह नहीं है कि यदि एक सामान्य कार्य को n बार कहा जाता है, तो अंतरिक्ष जटिलता O (n) होगी। सामान्य कार्य के लिए जब इसे कहा जाता है, तो पता स्टैक में धकेल दिया जाता है। उसके बाद जब यह पूरा हो जाता है, तो यह स्टैक से एड्रेस को पॉप कर देगा और इनवॉकर फंक्शन में आ जाएगा। फिर दोबारा कॉल करें। तो यह O(1) होगा।