That's not quite true Shabbir. The function address, i.e. the location of the code, remains constant. Each call to the function gets its own stack frame, whether the function is called from itself or from somewhere else. The two fib(2) calls are made from the same function address, but from different stack frames.

e.g.
fib(4) -> frame 1, calls:
- fib(3) -> frame 2, calls:
- - fib(2) -> frame 3, calls:
- - - fib(1) -> frame 4, doesn't call anyone, just returns 1
- - - fib(0) -> frame 4, doesn't call anyone, just returns 1
- - fib(1) -> frame 3 (reuse), doesn't call anyone, just returns 1
- fib(2) -> frame 2, calls:
- - fib(1) -> frame 3 (reuse), doesn't call anyone, just returns 1
- - fib(0) -> frame 3 (reuse), doesn't call anyone, just returns 1

This can be demonstrated by printing the address of n; this won't give the exact stack frame pointer, but it will show what's going on:

Code:
```int fib(int n)
{
printf("entering fib(n=%d); &n=%p\n",n,&n);
if(n==1||n==0)
return(1);
else
return(fib(n-1)+fib(n-2));
}

void go4e_15378()
{
printf("fib4=%d\n",fib(4));
}```
Output (added comments with --):

entering fib(n=4); &n=0012FDC4
entering fib(n=3); &n=0012FCEC
entering fib(n=2); &n=0012FC14 --*
entering fib(n=1); &n=0012FB3C -- 2 frame 4's
entering fib(n=0); &n=0012FB3C
entering fib(n=1); &n=0012FC14 --*
entering fib(n=2); &n=0012FCEC
entering fib(n=1); &n=0012FC14 --*
entering fib(n=0); &n=0012FC14 -- this and *** are frame 3
fib4=5

So as you can see from the following two lines extracted from the above output:
entering fib(n=2); &n=0012FC14
entering fib(n=2); &n=0012FCEC

the two fib(2) calls have n at a different place in memory.