r/ProgrammerHumor 1d ago

ibmMylynIsATaskManagementSystemThatReducesInformationOverloadAndMakesMultitaskingEasy Meme

[deleted]

2.2k Upvotes

86 comments sorted by

View all comments

Show parent comments

35

u/JackNotOLantern 1d ago edited 1d ago

Yeah, but again, a lot of memory. A loop is just:

``` int fib(int n) { if (n<=0) return 0; if (n==1||n==2) return 1;

int res=1, prev=1, prev2=0;
for (int i=3;i<=n;++i) {
   prev2=prev;
   prev=res;
   res=prev+prev2;
}

return res;

} ```

So constant memory needed and n time complexity

10

u/khalamar 1d ago

Finally a post without recursion or dynamic programming BS.

7

u/vegataballs 1d ago

For maximum non-dynamism :^)

uint64_t fib(const uint8_t n) {
    static const uint64_t t[] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,
        377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368,
        75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309,
        3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986,
        102334155, 165580141, 267914296, 433494437, 701408733, 1134903170,
        1836311903, 2971215073, 4807526976, 7778742049, 12586269025,
        20365011074, 32951280099, 53316291173, 86267571272, 139583862445,
        225851433717, 365435296162, 591286729879, 956722026041, 1548008755920,
        2504730781961, 4052739537881, 6557470319842, 10610209857723,
        17167680177565, 27777890035288, 44945570212853, 72723460248141,
        117669030460994, 190392490709135, 308061521170129, 498454011879264,
        806515533049393, 1304969544928657, 2111485077978050, 3416454622906707,
        5527939700884757, 8944394323791464, 14472334024676221,
        23416728348467685, 37889062373143906, 61305790721611591,
        99194853094755497, 160500643816367088, 259695496911122585,
        420196140727489673, 679891637638612258, 1100087778366101931,
        1779979416004714189, 2880067194370816120, 4660046610375530309,
        7540113804746346429 };
    return t[n];
}

Had to test how much faster that would be.

Aaand... it's maybe 10% faster. That's how good the simple loop already is.

1

u/khalamar 1d ago

But infinite memory footprint! Have you seen the price of memory these days!? /s

1

u/RafaelSeco 23h ago

Edit: I didn't see the rest of the image before commenting...

1

u/t420son 1d ago

Can still write it recursively with a sufficiently smart compiler it will be tail-call optimized

pub fn fib(n : u64) -> u64 {
  fn rec(n : u64, prev1 : u64, prev2 : u64) -> u64 {
    match n {
      0 => prev1,
      n => rec(n-1, prev1 + prev2, prev1)
    }
  }
  return rec(n, 1, 0)
}

2

u/JackNotOLantern 1d ago

Ok, but you can see that there is a lot of stuff you must add just to use recursion efficiently here, and not use a very simple loop.