Reverse Numbers function using recursion in C -
the following function meant return reverse of number using recursion. however, returns last digit of number. i'd know why , how fix it?
int rev(int number) { int revnum=0, sum=100; if(number<=9) return(number); else if(number>0) { return(rev(number/10)+revnum); revnum=(number%10)*sum; sum=sum/10; } }
thank you!!!
here's working code:
int rev (int number){ int base = 1; while (number / (base * 10)){/* * calculates base of number * ie number = 435 * base = 100 */ base *= 10; } if (number <= 9){ return number; } else if (number >= 10){ // notice different expression int revnum = (number % 10) * base; // out of order return rev (number / 10) + revnum; } }
the main reason code couldn't work, other commented above, sum
isn't preserved within calls. common problem in making recursive functions.
to remedy this, "base" calculated each function call, instead of having fixed value. bit better because allows larger numbers passed, instead of ones not bigger 100
(another limit of code you've chosen).
another implementation base base second parameter, doesn't have recalculated every function call. can, however, remedied simple macro. call may :
int rev_number (int number, int base){ .. }
but can conveniently placed in macro (or other function call):
#define rev(num) rev_number (number, 0)
this little more efficient, difference may or may not important.
Comments
Post a Comment