Feb 16, 2013 at 5:42pm UTC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Hi every one, please any one can explain following program output .
#include<stdio.h>
int func(int *a, int n)
{
if (n ==0) return 0;
else if (*a %2 == 0)
return *a+func(a+1, n-1);
else
return *a-func(a+1, n-1);
int main()
{
int a[] ={ 12, 7, 13,4,11,6};
printf(" = %d \n" , func(a,6));
return ;
}
output is : 15 but it is not clear for me how ?pls can any one explain in steps.
Last edited on Feb 16, 2013 at 6:21pm UTC
Feb 16, 2013 at 7:48pm UTC
1) func(a,6) calls func pointing to '12', indicating there are 6 elements in the array.
2) func looks at 12, sees that it is even, and therefore does *a+func(a+1, n-1), which sums 12 with the result of the next call to func
3) next call to func is effectively func(a+1,5)
which points to the '7'. func sees this is odd, so it subtracts 7-func( ...next call... )
4) next call is effectively func(a+2,4)
which points to the '13'. Again this is odd, so it subtracts 15-func( ...next... )
5) next points to 4, which is even... so [code]4+func(...next...)
6) next points to 11, which is odd... so it subtracts
7) next points to 6, which is even... so it adds
8) next call has n=0, so func just returns 0
9) Step 7's call (6,even) takes the return value of 0, adds 6 to it, then returns 6
10) Step 6's call (11,odd) takes that return value of 6, subtracts it from 11, and returns 5 (11-6)
11) Step 5's call (4,even) takes that return value of 5, add's 4 to it... returning 9
12) Step 4's call (13,odd) does 13-9, returning 4
13) Step 3's call (7, odd) does 7-4, returning 3
14) Step 2's call (12,even) does 12+3, returning 15
15) Step 1 gets the final return value of 15 and prints it. Hence why your program outputs 15