PHP पाठ – पाठ 9 – पुनरावृत्ति (Recursion)।
पिछले पाठ में हमने PHP में फ़ंक्शन्स का उपयोग सीखा था। अब हम उनके उपयोग को और गहराई से समझेंगे। पहले तक हम ऐसे प्रकार की फ़ंक्शन्स लिखते थे:
<?php
function myFunction() { // फ़ंक्शन की परिभाषा
}
$x = myFunction(); // फ़ंक्शन का कॉल
?>
लेकिन क्या होगा अगर हम उसी फ़ंक्शन के अंदर उसी को ही दोबारा कॉल करें?
<?php
function myFunction() {
$x = myFunction();
...
return $x;
}
$y = myFunction();
?>
जब एक फ़ंक्शन अपने ही अंदर खुद को कॉल करता है, इसे रिकर्शन (Recursion) कहा जाता है। यह सुनने में जटिल लगता है, लेकिन व्यवहार में यह बहुत सरल है।
उदाहरण: संख्या को घात (Power) में उठाना
गणित में, किसी संख्या की n-वीं घात का अर्थ है उस संख्या को स्वयं से n बार गुणा करना। PHP में इसे हम रिकर्शन से इस प्रकार लिख सकते हैं:
<?php
function myDegree($x, $n) {
if ($n == 0) {
return 1;
}
if ($n < 0) {
return myDegree(1 / $x, -$n); // -$n का अर्थ है चिह्न को धनात्मक करना
}
return $x * myDegree($x, $n - 1); // फ़ंक्शन को स्वयं के भीतर कॉल करना
}
$y = myDegree(2, -4); // पहला कॉल
print $y;
?>
विस्तृत विश्लेषण:
जब return चलाया जाता है, फ़ंक्शन उसी क्षण समाप्त होकर मान वापस लौटाता है।
पहला शर्त if($n == 0) — यदि घात शून्य है, तो परिणाम 1 होगा (क्योंकि किसी भी संख्या की 0वीं घात 1 होती है)।
दूसरा शर्त if($n < 0) — यदि घात ऋणात्मक है, तो हम उसे धनात्मक बनाते हैं, लेकिन आधार (base) को उसके व्युत्क्रम (reciprocal) में बदल देते हैं।
अंत में, यदि घात 0 से अधिक है, तो फ़ंक्शन हर बार खुद को एक कम घात ($n - 1) के साथ कॉल करता है और परिणाम को $x से गुणा करता है।
कार्य की प्रत्येक पुनरावृत्ति:
1️⃣ पहली बार: घात = -4, संख्या = 2 → शर्त 2 चलेगी → संख्या बन जाएगी 1/2 और घात = 4।
2️⃣ दूसरी बार: घात = 4, संख्या = 0.5 → फिर तीसरी शर्त चलेगी → return $x * myDegree($x, $n - 1)
3️⃣ अगली पुनरावृत्तियाँ क्रमशः 3, 2, 1 तक जारी रहेंगी।
अंत में जब $n == 0 होगा, तो 1 लौटाया जाएगा, और फिर सभी पिछले स्तरों के गुणन से अंतिम परिणाम मिलेगा।
उदाहरण: फैक्टोरियल (Factorial)
संख्या n का फैक्टोरियल (n!) वह गुणनफल होता है जो 1 से लेकर n तक की सभी संख्याओं का गुणा करने से प्राप्त होता है। उदाहरण: 6! = 6 × 5 × 4 × 3 × 2 × 1 = 720.
PHP में हम यह भी रिकर्शन से लिख सकते हैं:
<?php
function myRecursion($x) {
if ($x == 1) {
return $x;
}
return $x * myRecursion($x - 1);
}
$y = myRecursion(8);
print $y;
?>
यह उदाहरण पहले वाले से भी सरल है।
हर बार फ़ंक्शन स्वयं को $x - 1 के साथ कॉल करता है, जब तक कि $x == 1 नहीं हो जाता।
इस प्रकार क्रमशः 8×7×6×5×4×3×2×1 का परिणाम प्राप्त होता है।
यह उदाहरण स्पष्ट रूप से दिखाता है कि रिकर्शन कैसे एक ही फ़ंक्शन के बार-बार कॉल से जटिल गणनाएँ सरल बना सकता है।