0

How the output of this code is come as 17. When I calculated it gives me 18?

#include <stdio.h> int f(int n) { static int r = 0; if (n <= 0) return 1; if (n > 3) { r = n; return f(n-1)+r; } return f(n-2)+r; } int main() { printf("%d", f(5)); } Please explain the steps of code.

17th Aug 2019, 2:34 PM
Misha
2 Réponses
0
I think 18 seems like the right answer. Function calls(working): 1.f(n-1)+r;//n=5 2.f(n-1)+r;//n=4 3.f(n-2)+r;//n=3 4.f(n-2)+r;//n=1 5.1;//n=-1. Edit: Now, after function call returns the final value 1, we add the returned values to the value of the static variable r(which now has value 4 for any function call). ((((1+4)+4)+4)+4) =(((5+4)+4)+4) =((9+4)+4) =(13+4) =17. Point is evaluation is done after last function returns a value so static variable r's value remains unchanged i.e. 4.
17th Aug 2019, 3:26 PM
Arnold D'Souza
Arnold D'Souza - avatar
0
Arnold D'Souza but on executing the code will return 17 so I think there is something which I'm doing wrong
17th Aug 2019, 4:02 PM
Misha