我目前正在研究微处理器,特别是8086,最近刚刚推出了汇编级语言。我目前在nCr(组合)的汇编级程序中通过下面给出了汇编级代码的递归过程,有人可以解释一下这里使用的逻辑,通过递归计算nCr。
我不想要解释整个程序,但我只想了解nCr递归工作的基本概念,我无法理解。
我通过递归解决了nCr的这个问题(不是汇编语言,因为我最近开始学习汇编)但是使用不同类型的逻辑,即通过递归地实现阶乘函数,然后使用公式计算nCr nCr,但这里使用了一些其他逻辑,我无法理解。
此代码已作为示例发布在8086{4}beginner.com上,没有任何评论。
DATA SEGMENT
n db 10
r db 9
ncr db 0
DATA ENDS
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov ncr,0
mov al,n
mov bl,r
call encr
call display
mov ah,4ch
int 21h
encr proc
cmp al,bl
je ncr1
cmp bl,0
je ncr1
cmp bl,1
je ncrn
dec al
cmp bl,al
je ncrn1
push ax
push bx
call encr
pop bx
pop ax
dec bl
push ax
push bx
call encr
pop bx
pop ax
ret
ncr1: inc ncr
ret
ncrn1: inc al
ncrn: add ncr,al
ret
encr endp
display proc
push cx
mov al,ncr
mov ch,al
and al,0f0h
mov cl,04
shr al,cl
cmp al,09h
jbe next
add al,07h
next:add al,30h
mov dl,al
mov ah,02h
int 21h
mov al,ch
and al,0fh
cmp al,09h
jbe next2
add al,07h
next2:add al,30h
mov dl,al
mov ah,02h
int 21h
pop cx
ret
display endp
code ends
end start
我不想要解释整个汇编代码,我只是坚持递归的逻辑,即我无法理解用于计算nCr的逻辑。例如,我知道如果基本情况不匹配al的值减少,直到它匹配其中一个基本情况(bl的值也随着程序的进行而减少1),并且nCr的计算由要么将其递增1,要么根据基本情况添加al。 我无法理解一些额外的工作如何计算nCr,这是我无法理解递归背后的逻辑。