25 votes 25 votes What is the output printed by the following program? #include <stdio.h> int f(int n, int k) { if (n == 0) return 0; else if (n % 2) return f(n/2, 2*k) + k; else return f(n/2, 2*k) - k; } int main () { printf("%d", f(20, 1)); return 0; } $5$ $8$ $9$ $20$ Algorithms gateit-2005 algorithms identify-function normal + – Ishrat Jahan asked Nov 3, 2014 edited Jun 12, 2018 by Milicevic3306 Ishrat Jahan 8.9k views answer comment Share Follow See all 2 Comments See all 2 2 Comments reply bthebestSelf commented Dec 26, 2020 reply Follow Share Answer should be -15 which is not given in the options, observe carefully the value of k 0 votes 0 votes Yaman Sahu commented Nov 13, 2021 i edited by Yaman Sahu Nov 13, 2021 reply Follow Share int f(int n, int k) { if (n == 0) return 0; else if (n % 2) return f(n/2, 2*k) + k; // This condition is true when n%2 is 1 else return f(n/2, 2*k) - k; // otherwise } bthebestSelf you are doing n%2 = 0 as true, then you get -15 as the answer. If you doing n%2 = 0 as false then you get 9 as an answer :) 6 votes 6 votes Please log in or register to add a comment.
Best answer 34 votes 34 votes See the following calling sequence. Boxed values show the return values. Hence, answer is option C. Rajesh Pradhan answered Nov 13, 2016 edited May 7, 2021 by gatecse Rajesh Pradhan comment Share Follow See all 4 Comments See all 4 4 Comments reply Abbas2131 commented Jul 20, 2017 reply Follow Share How is it f (10,2)-1 ??? When its given for every even N we have +k and for every odd n we have -k Then how come we reverse the sign in each interation ? 4 votes 4 votes Ekta07_GATE commented Sep 16, 2018 reply Follow Share Can anybody pls explain how the series values comes? 0 votes 0 votes Vamsi krishna satya commented Dec 18, 2018 reply Follow Share it is if (n % 2) return f(n/2, 2*k) + k which means n%2 must be 1 for condition to be true.I think you mistook it for if (n%2==0) 9 votes 9 votes shashankrustagi commented Jan 14, 2021 reply Follow Share ya, its ok. you mistook, you will never mistook it agin. ok keep it up vamsi 0 votes 0 votes Please log in or register to add a comment.
12 votes 12 votes The sequence has to be followed. 6.) f(20,1) = 9. 5.) f(10,2) - 1 = 9 4.) f(5,4) - 2 = 10 3.) f(2,8) + 4 = 12 2.) f(1,16) - 8 = 8 1.) f(0,32) + 16 = 16 Gate Keeda answered Nov 3, 2014 Gate Keeda comment Share Follow See all 7 Comments See all 7 7 Comments reply Show 4 previous comments neha singh commented Aug 24, 2016 reply Follow Share Can anybody plzz explain how this series values comes. 0 votes 0 votes neha singh commented Aug 24, 2016 reply Follow Share its clear now. 0 votes 0 votes Sandeep Suri commented Jan 9, 2018 reply Follow Share Else if (n%2) when n is multiple of 2 it will be like else if (0) therefore it will return false and will execute next else and return f(n/2,2*k) - K.... 0 votes 0 votes Please log in or register to add a comment.
0 votes 0 votes 9 will be printed. Answer: C manish_pal_sunny answered Aug 17, 2020 manish_pal_sunny comment Share Follow See all 0 reply Please log in or register to add a comment.