hi: I want to use recursion function to transform a integer from binary form to ascii form. But the result is wrong.I don't why ,please help to analyse.
soure code:
void binary_to_ascii(unsigned int value) { unsigned int quotient; quotient = value/10; if(quotient !=0 ) binary_to_ascii(quotient); putchar(value%10+'0'); } int main() { while(1){ binary_to_ascii(4267); } }
I want to produce characters '4','2','6','7' in sequence. but the result is '4','4','4'. I don't know what is wrong with my code.
http://www.keil.com/support/man/docs/c51/c51_le_reentrantfuncs.htm
* Small model reentrant functions simulate the reentrant stack in idata memory. * Compact model reentrant functions simulate the reentrant stack in pdata memory. * Large model reentrant functions simulate the reentrant stack in xdata memory.
Yes, I know it can be done; what I said was that I thought it was a bad idea to do it - for the reasons stated!
You are right. But in general I think, an unlimited recursion is a bad idea. In other case, the maximum size of the required stack is known.
Yes, this is a case of a linear problem that is trivial to rewrite as a loop. And as i noted earlier, the only state info the loop will need is one character/iteration since the loop produces the characters in the reverse order.
Another alternative so instead produce the output in correct order is to have a sequence of operations handling 10^4, 10^3, 10^2, ...
The recursive solution requires the return address for n iterations, and an unknown number of state bytes/iteration that will depend completely on compiler and optimization level. And how will the compiler know the maximum recursion depth?
I have used reentrant ,but the result always lack one charater. I want the result is '4','2','6','7', but the actual outcome is '4','2','6'. the '7' disappears. why?
void binary_to_ascii(unsigned int value reentrant
{
unsigned int quotient; quotient = value/10; if(quotient !=0 ) binary_to_ascii(quotient); putchar(value%10+'0');
}
int main() { while(1){ binary_to_ascii(4267); } }