ZX Magazine #07

Приёмы кодинга - Рекурсия.

<b>Приёмы кодинга</b> - Рекурсия.
        /----------------                
        | Приемы кодинга |                
        ----------------/                
                                          
 Экскурсия в рекурсию (ц)Радиолюбитель ВК 
                                          
  И  так,  что за зверь такой рекурсия и с
чем  его  едят  ? Рекурсия- ето есть вызов
программой  сямой  себя. Значит простейшая
рекурсия- 10 GO SUB 10 .                  
  Однако из рекурсии должен быть какойлибо
выход,  иначе какой же тогда в ней смысл ?
Кстати, забыл сказать, что переменные моей
процедуры  не  мои переменные (ц)Кто-то из
великих.Обыдно,  но  в  васике  нету такой
фигни, которая сохраняла бы переменные, по
этому перейдем на ПАСЦАЛ.                 
                                          
  Program recursion;                      
  Procedure rec(n:integer);               
  Begin                                   
   If n>1 then rec(n-1);                  
   WriteLn(n)                             
  End;                                    
  (* Main *)                              
  Begin                                   
   Rec(10)                                
  End.                                    
                                          
 Результат: 10 9 8 7 6 5 4 3 2 1          
                                          
  Но   ПАСЦАЛ  потому и  ПАСЦАЛ, что даже на
писюке на нем ничего на делают, и по этому
перейдем на ассемблер.                    
                                          
  "Рекурсия на ассемблере ??? %-|",- Спро-
сите вы. "Ага, а почему бы и нет",- отвечу
я.  Нет ничего невозможного. Для примера и
для продолжения темы приведу вам маленькую
библиотечку печати.                       
                                          
  Точка входа: BPR, номер функции в гС.   
                                          
     Let's go !                           
                                          
BPR      PUSH ВС,DE,HL,AF                 
         LD A,С                           
         СР 1                             
         JR NZ,BPR0                       
         POP AF                           
         PUSH AF                          
         RST #10                          
BPR_     POP AF,HL,DE,ВС                  
         RET                              
                                          
BPR0     СР 2                             
         JR NZ,BPR1                       
         LD A,22                          
         LD С,1                           
         CALL BPR     ;А ВОТ ТЕ И РЕКУРСИЯ
         LD A,D                           
         CALL BPR                         
         LD A,Е                           
         JR BPR                           
                                          
BPR1     LD A,(HL)                        
         AND (HL)                         
       JR Z,BPR_                          
         LD С,1                           
         CALL BPR                         
         JR BPR1                          
                                          
  1:Печать символов. A = символ.          
  2:Установка печати. В D = X, Е = Y.     
  3:Печать текста, в HL = адресс текста,  
     0 - маркер конца.                    
                                          
 Похоже, это все :)                       



Другие статьи номера:

От авторов - Вступительное слово.

От авторов - Управление.

Приёмы кодинга - Рекурсия.

Приёмы кодинга - Тыр-дос.

Приёмы кодинга - Пара советов.

Пробы кнопочки - 35 способов применения CD-ROM.

Пробы кнопочки - А я был в Минске...

Релизъ - понравилась мне буква "Ъ".

Напоследок - Заключение.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Обмен опытом - Art Studio и принцип открытой архитектуры (как написать свои модули к редактору).
Железячки - Даёшь Спектруму 3.5"дисковод!
.information - Бета-релиз второго выпуска ZX-Chart.

В этот день...   26 октября