Я пытаюсь реализовать рекурсивную функцию, помещая и вставляя промежуточные значения в стек, также используя рекурсию, мне нужно реализовать числа Фибоначчи.
это часть сборки каждый раз, когда я запускаю программу, она дает мне, что сумма 10 равна 0, и когда я пытаюсь изменить ее, я получаю, что сумма 10 равна 20 или 60.
в функции "more:" я пытался выполнить f (n-1) + f (n-2).
.text
.global recur
recursion:
clr r18
call recur
mov r24, r18
ret
recur: // simple summation recurrence. We look at R24 and if it is > we set up things to recur
CPI R24, 3
brge more // do some more
// we are base case
LDI R24, 1
CLR R25
ret
more:
dec R24
push R24
dec r24
call recur
add r18, r24
// at this point R24 is the result, we need to add on what we pushed
pop r24
call recur
ADD R18, R24
clr r24
CLR R25
ret
эта часть написана на C
// Cooper
// 2018
// recursion
// set up connect to AVR code
extern "C" { int recur(int);}
void setup() {
// put your setup code here, to run once:
int v;
v=recur(10);
Serial.begin(9600);
Serial.print("The summation is ");
Serial.println(v);
}
void loop() {
// put your main code here, to run repeatedly:
int v;
v=recur(10);
delay(1000);
Serial.println(v);
}