Я застрял с пониманием того, что эта функция делает в процессе. Это void-функция, которая получает int n в качестве аргумента. По рекурсии эта функция вычисляет мощность n данной матрицы. Я очень озадачен командой return, потому что она возвращает ту же функцию void с n-1, что и аргумент. Я пытаюсь написать этот код в формате mips (сборка), но путаница очень усложнила его.
Насколько я знаю, команда return возвращает какое-то значение. Таким образом, в mips регистр v0 имеет возвращаемое значение. Но так как это пустая функция, она ничего не возвращает. Так что я просто заставил его перейти к функции с аргументом n-1.
Но мне интересно, он возвращает адрес функции ??
Я просто запутался в процессе возвратафункции void.
Означает ли мой код mips то же самое с кодом c ??
power:
addi $t0,$0,1 //t0=1
be $a0,$t0,exit //a0 is the argument n. if n==1, return;(which means go to exit)
// other codes multipying matrix. I'll skip this part
addi $a0,$a0,-1 //n=n-1; a0 is the argument for power(n-1)
j power //jumps to power, which executes power(n-1)
exit:
/* when the power is over...*/
void power(int n){
if (n==1) return;
/*This part is just multiplication of the matrix and it has got nothing to do with the argument. What it does is multiply the matrix to itself regarless of what the argument n is. I'll just skip this part.*/
return power(n-1);
}