Рекурсия - Assembler
Формулировка задачи:
Вот убейте, застрелите, че хотите короче со мной делайте, но без понятия как написать данное задание на ассемблере!!! Всетаки мозг как-то что ли на Си более заточен. Пытался по разному, но что ни делай все core dumped!!!
Не ребят я не ленивый, ведь хочешь не хочешь, а придется научится это делать!!! Кто чем может, подскажите как написать это проклятое задание. Программа должна для целочисленного n высчитывать значение, которое вычисляется на основе следующего задания:
Для значений n 0,1 и 2 выводит на экран соответствующие значения согласно условию, т.е.1,0,1 соответственно. Что либо дальше писал - core dumped!!!Но всеравно мне кажется,что то, что я написал, больше притянуто за уши для частных случаев. Вот такой ВОПРОСИК.
f(n) = 1 for n=0; f(n) = 0 for n=1; f(n) = 1 for n=2; f(n) = f(n - 1)+2*f(n-2)-2*f(n-3) for n>=3
Например для значения 5 высчитало следующее: f(5) = f(4)+2*f(3)-2*f(2)= /*значение f(2) известно из условия и == 1 поэтому вместо f(2) запишем -2*1 т.е. -2. Расписываем далее*/ = f(3)+2*f(2)-2*f(1)+f(2)+2*f(1)-2*f(0)-2 = f(2)+2*f(1)-2*f(0)+2*1-2*0+1+2*0-2*1-2=1+2*0-2*1-1=-2 Обнаглею в край и попрошу знатаков ассемблера, которые щёлкают данные задания как орешки тупо выкинуть код данного задания,а в противном случае буду рад какому-либо псевдокоду, алгоритму, как это можно написать либо подсказкам(но в моем случае очень прозрачным подсказкам, а не то придётся и их объяснять)))). Пытался что-то сам написать. Вышло следуюющее:.intel_syntax noprefix .text .global main main: mov eax,2 push eax call f add esp,4 push edx mov ebx,offset message push ebx call printf add esp,8 mov eax,0 ret f: mov ecx,[esp+4] cmp ecx,2 jnz not2 mov edx,1 push edx not2: cmp ecx,1 jnz not1 mov edx,0 push edx not1: cmp ecx,0 jnz not0 mov edx,1 push edx not0: dec eax add edx,[esp+4] pop edx ret .data message: .asciz "f(n) = %i\n"
Решение задачи: «Рекурсия»
textual
Листинг программы
shl eax neg eax