Carmi Merimovich

כרמי מרימוביץ

אתר אישי

סדרת פיבונצ'י רקורסיבי

fibo::
    addi    t2, x0, 2
    bge     a0, t2, work // n > 1
    addi    a0, x0, 1   // f(0) = f(1) = 1
    jalr    x0, 0(ra)

work:
    addi    sp, sp, -24
    sd      ra, 0(sp)
    sd      a0, 8(sp)   // n

    addi    a0, a0, -1  // n-1
    jal     ra, fibo    // f(n-1)
    sd      a0, 16(sp)  // f(n-1)

    ld      a0, 8(sp)   // n
    addi    a0, a0, -2  // n-2
    jal     ra, fibo    // f(n-2)

    ld      t0, 16(sp)  // f(n-1)
    add     a0, a0, t0  // f(n-2) + f(n-1)

    ld      ra, 0(sp)
    addi    sp, sp, 24
    jalr    x0, 0(ra)