In this code which is a program to print elements 1 to 5 recursively, when I use n--
instead of n-1
, I am getting a stack overflow error.
whereas when n-1
is used the code worked perfectly.
shouldn't n--
and n-1
work the same in this code?
//when using n--
class PrintElements1to5
{
public static void main(String[] args)
{
recursivePrint(5);
}
static void recursivePrint(int n)
{
if(n<1)
return;
recursivePrint(n--);
System.out.print(n " ");
}
}
output:
Exception in thread "main" java.lang.StackOverflowError
//when using n=n-1
class PrintElements1to5
{
public static void main(String[] args)
{
recursivePrint(5);
}
static void recursivePrint(int n)
{
if(n<1)
return;
recursivePrint(n-1);
System.out.print(n " ");
}
}
output:
1 2 3 4 5
CodePudding user response:
n--
returns the value of n
first, then decrement n
. So in your case, it becomes an infinite loop because n
is never changing. You can use --n
instead which decrement n
first, then returns the value of n
. Let's take a simpler example.
int x = 3;
System.out.println(x - 1); // prints 2, x is still 3
System.out.println(x--); // prints 3, x becomes 2
System.out.println(--x); // prints 1, x becomes 1