0

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--);
}
3
Contributors
4
Replies
5
Views
5 Years
Discussion Span
Last Post by ram619
Featured Replies
  • 2

    It has to do with the way the call [icode]reverse(no--)[/icode] is being implemented. The post decrement operator allows for the variable to be used in it's context [i]before[/i] it is decremented. So, in your situation it is using the original value of [icode]no[/icode] for the recursive call and decrementing it … Read More

0

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 by StephNicolaou: n/a

0

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.

2

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.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.