读书人

函数第归有关问题

发布时间: 2012-02-19 19:43:38 作者: rapoo

函数第归问题
#include <stdio.h>

void convert(int i);

int main()
{

convert(478);

}

void convert(int i)
{
int n;

if((n=i/10)!=0)
convert(n);

putchar(i%10+ '0 ');
}

百思不得其解,究竟先输出的是4呢还是先输出的是8?也跟踪调试过,还是不明白。请教了,谢谢!

[解决办法]
convert(478);
convert(47);
convert(4);
[解决办法]
convert(478)-> convert(47)-> convert(4)-> putchar( '4 ');
[解决办法]
void convert(int i)
{
int n;

if((n=i/10)!=0)
convert(n);

putchar(i%10+ '0 ');
}

百思不得其解,究竟先输出的是4呢还是先输出的是8?
===============================================
看你的递归过程:
convert(n);
putchar(i%10+ '0 ');
也就是先递归,后输出,那么就是最底层的递归先输出,
结果就是 478!

如果是:
putchar(i%10+ '0 '); //放在前面
convert(n);
那么就反过来,
先输出,后递归,
结果就是 874, 明白?
[解决办法]
putchar(111) :输出的是ASCII码表的111号元素:o

putchar( '111 ') :putchar()只能输出1个字符,所以实际第一个字符以后的字符都是多余的,此题输出1

putchar( '0 '+111) :此题输出ASCII码表的‘0’后的第111个元素
‘0’是48号元素,即此题输出159号元素
ASCII码表只有128个元素,其它都是空格,故此题输出空格

putchar( '0 '+ '111 ') :如2题所说此题等价于putchar( '0 '+ '1 ')
‘0’48号,‘1’49号;即输出97号元素:a

[解决办法]
系统将i和n存入如下的栈中:
未知 4---------------4
4 47--------------7
47 478-------------8
-------------------------------------------
n i---------------余数
------------------------------------------

程序运行到最里层时,i=4,n=0,此时跳过convert(n),函数putchar()输出余数4;然后跳到上层,此时i=47,convert()已经运行完了,执行函数putchar(i%10+ '0 '),输出余数7,然后跳到上层,此时i=478,convert()已经运行完了,执行函数putchar(i%10+ '0 '),输出余数8,
于是结果为478;

putchar(i+ '0 ')是输出数字i.

读书人网 >C语言

热点推荐