C Programming - Functions - Discussion
#include<stdio.h>
int reverse(int);
int main()
{
int no=5;
reverse(no);
return 0;
}
int reverse(int no)
{
if(no == 0)
return 0;
else
printf("%d,", no);
reverse (no--);
}
Step 1: int no=5; The variable no is declared as integer type and initialized to 5.
Step 2: reverse(no); becomes reverse(5); It calls the function reverse() with '5' as parameter.
The function reverse accept an integer number 5 and it returns '0'(zero) if(5 == 0) if the given number is '0'(zero) or else printf("%d,", no); it prints that number 5 and calls the function reverse(5);.
The function runs infinetely because the there is a post-decrement operator is used. It will not decrease the value of 'n' before calling the reverse() function. So, it calls reverse(5) infinitely.
Note: If we use pre-decrement operator like reverse(--n), then the output will be 5, 4, 3, 2, 1. Because before calling the function, it decrements the value of 'n'.
5==0 // false it comes to else
Print 5
Reverse(no--) // now no = 4
Similarly, at last no=1
Reverse (no--) no = 0
If 0==0 // true
Return 0;
After return it comes to main function.
So, option A is correct.
1.Pre-increment/pre decrement.
2.Substitute value.
3.Evaluate.
4.Post Increment/post decrement.
First, we should know that the no in main is not the same as the function reverse because you pass the value to the function not refrence.
Second, when you call a function it opens the location in the stack and if you call the same function again it will open another location so if you make a decrement to (no) in the first call the second call will not know you decreased it to 4 ##well the (no) in first will save the value of new (no) by 4 ## it will work with a parameter which it will be 5 all times.
If you call the function with refrence by pointer for example the porgram will print 5 4 3 2 1.
Likewise if used pre-decrement.
Hope this helped.