LC2K汇编语言递归实现组合数

第一篇博客。。。

首先说明一下问题,就是汇编的递归调用,具体为求一个组合数问题

 

 1 ;N3=com(N1,N2)  com(n,k)=combine(n-1,k)+com(n-1,k-1)
 2 
 3 CODE SEGMENT
 4 
 5 ASSUME CS:CODE,DS:DATA
 6 
 7 BEG:  MOV AX,DATA
 8 
 9 MOV DS,AX
10 
11 MOV SI,OFFSET NUM1 ;offset of N1, thus DS:SI refers to N1
12 
13 MOV AX,[SI] ;import N1 to AX
14 
15 MOV CX,[SI+2]  ; import N2 to CX
16 
17 CALL com ;calculate com(N1,N2)  'call'push the current CS:IP + 1, import the label address
18 
19 MOV [SI+4],BX ;save the result
20 
21 JMP $
22 
23  
24 
25  
26 
27 com:     ; input   AX:n  CX:k    output   BX:com(n,k)
28 
29 CMP CX,0; k==0 --> return 1
30 
31 JE return1
32 
33 CMP AX,CX; n==k-->return 1
34 
35 JE return1
36 
37 PUSH AX ; protect AX
38 
39 PUSH CX    ; protect AX
40 
41 SUB AX,0x0001
42 
43 CALL com ; calculate com(n-1,k)
44 
45 POP CX
46 
47 POP AX
48 
49 SUB AX,0x0001
50 
51 SUB CX,0x0001
52 
53 PUSH BX ; protect com(n-1,k)
54 
55 CALL com ; calculate com(n-1,k-1)
56 
57 POP AX
58 
59 ADD BX,AX
60 
61 JMP allreturn
62 
63 return1:
64 
65 MOV BX,1
66 
67 allreturn:
68 
69 RET ; 'ret' import the CS:IP from the top of stack, and stack pop this address
70 
71  
72 
73 CODE ENDS
74 
75 DATA SEGMENT
76 
77 NUM1 DW 0005H ;N
78 
79 NUM2 DW 0002H;K
80 
81 NUM3 DW 2222H ;ANS (combine(N,K))
82 
83 DATA ENDS
84 
85 END BEG

 

posted @ 2015-11-24 22:16  Initial_Dream  阅读(520)  评论(0)    收藏  举报