f(5) = 5 f(4) f(3) 2 3 f(2) f(1) f(3) f(2) 1 1 2 1 f(1) f(0) f(1) f(0) f(2) f(1) 1 0 1 0 1 1 f(1) f(0) 1 0 f(5): once f(4): once f(3): 2 times f(2): 3 times f(1): 5 times This traditional recursive fibonacci algorithm does so repeated work that it runs in THETA (fib(n)) time, THETA (((1+sqrt(5))/2)^n) time. Recursion sucks if it starts doing a lot of repeated work. There's no need to compute fib(3) three times. Once is enough. So, if you can replace recursion with iteration and store stuff in a table rather than use recursion, this is dynamic programming. "Programming" is an old mathematical term for storing information in a table. char *a = "HELLO"; a[0] = 'J'; printf ("%s\n","HELLO");