Recursion परिभाषा, सिंटेक्स और उदाहरण
असेंबली लैंग्वेज में, जब किसी कोड ब्लॉक या इंस्ट्रक्शन ग्रुप को बार-बार इस्तेमाल करना होता है, तो रिकर्सन का इस्तेमाल किया जाता है। रिकर्सन तब होता है जब कोई फ़ंक्शन या निर्देश समूह बार-बार प्रत्यक्ष या अप्रत्यक्ष रूप से स्वयं को कॉल करता है।
रिकर्सन दो प्रकार के होते हैं: प्रत्यक्ष और अप्रत्यक्ष।
- direct recursion -प्रत्यक्ष पुनरावर्तन में, प्रक्रिया स्वयं को कॉल करती है।
- indirect recursion - अप्रत्यक्ष पुनरावर्तन में, पहली प्रक्रिया दूसरी प्रक्रिया को कॉल करती है, जो बदले में पहली प्रक्रिया को कॉल करती है।
पुनरावर्तन को कई गणितीय एल्गोरिथम में देखा जा सकता है। उदाहरण के लिए, किसी संख्या के क्रमगुणन की गणना के मामले पर विचार करें। किसी संख्या का गुणनखंड समीकरण किसके द्वारा दिया जाता है
Fact (n) = n * fact (n-1) for n > 0
Recursion Exampal
उदाहरण के लिए: 5 का फैक्टोरियल 1 x 2 x 3 x 4 x 5 = 5 x 4 का फैक्टोरियल है और रिकर्सिव प्रोसेस दिखाने के लिए यह एक अच्छा उदाहरण हो सकता है। प्रत्येक पुनरावर्ती एल्गोरिदम में समाप्ति की स्थिति होनी चाहिए, यानी, जब कोई शर्त पूरी हो जाती है तो प्रोग्राम की रिकर्सिव कॉलिंग बंद होनी चाहिए। फैक्टोरियल एल्गोरिथम के मामले में, अंतिम स्थिति तब होती है जब n 0 होता है।
Example निम्नलिखित कार्यक्रम दिखाता है कि असेंबली भाषा में फैक्टोरियल एन को कैसे लागू किया जाए। प्रोग्राम को आसान रखने के लिए, हम 3 के फ़ैक्टोरियल की गणना करेंगे।
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov bx, 3 ;for calculating factorial 3
call proc_fact
add ax, 30h
mov [fact], ax
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov edx,1 ;message length
mov ecx,fact ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
proc_fact:
cmp bl, 1
jg do_calculation
mov ax, 1
ret
do_calculation:
dec bl
call proc_fact
inc bl
mul bl ;ax = al * bl
ret
section .data
msg db 'Factorial 3 is:',0xa
len equ $ - msg
section .bss
fact resb 1
result −
Factorial 3 is: 6