0
C programming
void main (){ int a =3; fun(a); } void fun(int n){ if(n>0){ fun(--n); printf("%d ",n); } } Why the output : 012
4 Respostas
+ 5
FIRST READ THIS:
Recursive functions. What an interesting part of programming. Look:
in void main you call the function with n = 3
Now you call fun:
void fun(3) {
   if (n > 0 (true)) {
         fun(--n); // n now is 2
         prinf(“%d”, n); // this line isn’t executed yet because you called fun in the previous line
   }
}
//NOW n = 2
void fun(2) {
   if (n > 0 (true)) {
         fun(--n); // n now is 1
         prinf(“%d”, n); // this line isn’t executed yet because you called fun in the previous line
   }
}
void fun(1) {
   if (n > 0 (true)) {
         fun(--n); // n now is 0, but when n reached if block it was 1. Calls fun(0)
         prinf(“%d”, n); // this line isn’t executed yet because you called fun in the previous line
   }
}
void fun(0) {
   if (n > 0 (false)) {
         // this isn’t executed
   }
}
Wait a moment I’m continuing this in the next message
+ 5
LAST READ THIS:
Now that void fun(0) didn’t continued the recursion, the printf line of each fun() call is executed.
void fun(1) {
   if (n > 0 (true)) {
         fun(--n); // n now is 0. This line is already executed.
         prinf(“%d”, n); // it prints the value of n, 0. It doesn’t print a new line. Now the output is 0.
   }
}
void fun(2) {
   if (n > 0 (true)) {
         fun(--n); // n now is 1. This line is already executed.
         prinf(“%d”, n); // it prints the value of n, 1. It doesn’t print a new line. Now output is 01.
   }
}
void fun(3) {
   if (n > 0 (true)) {
         fun(--n); // n now is 2. This line is already executed.
         prinf(“%d”, n); // it prints the value of n, 2. It doesn’t print a new line. So the output is 012.
   }
}
// END OF RECURSION
Output of the code:
012
+ 1
Thank you , for answer
0
The code use the stack memory , by branches instructions





