C Programming - Functions - Discussion

Discussion Forum : Functions - Find Output of Program (Q.No. 4)
4.
What will be the output of the program?
#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--);
}
Print 5, 4, 3, 2, 1
Print 1, 2, 3, 4, 5
Print 5, 4, 3, 2, 1, 0
Infinite loop
Answer: Option
Explanation:

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'.

Discussion:
34 comments Page 4 of 4.

Tanmay said:   6 years ago
I think A is correct because;
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)

Xiyaz said:   5 years ago
Nice explanation, thanks @Chetan.

Mangesh Kulkarni said:   4 years ago
In Increment/Decrement Operator following path is Taken:

1.Pre-increment/pre decrement.
2.Substitute value.
3.Evaluate.
4.Post Increment/post decrement.

Monier said:   2 years ago
Infinite loop is correct but why ?

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.
(1)


Post your comments here:

Your comments will be displayed after verification.