Why Does this code Leads to Infinite Loop?????

#include<stdio.h>
#include<conio.h>
int reverse(int);
void main()
{
 int no=5;
 reverse(no);
 getch();
}

int reverse(int no)
{
 if(no==0)
 {
  return 0;
 }
 else
 {
  printf("%d",no);
 }
 reverse(no--);
}

I would say that once 5 is decremented to 0, it stays as 0 as all you have is 'return 0' doing nothing else, and you have no system exit at that point.

Edited 4 Years Ago by StephNicolaou: n/a

Steph Nicolaou ..its never entering the "if" part, you can check that. and if it has entered then the program would have ended after returning 0..
and the best part of this program is, 5 is never getting Decremented . Might be post Decrement doesn't work with recursion as it doesn't work with return.

It has to do with the way the call reverse(no--) is being implemented. The post decrement operator allows for the variable to be used in it's context before it is decremented. So, in your situation it is using the original value of no for the recursive call and decrementing it after that (which never occurs). Change that to reverse(--no) or reverse(no - 1) and you will get the behavior you are after.

This question has already been answered. Start a new discussion instead.