if((i=n/10)!=0) convert(i) 递归法将一个整数转换成字符形式输出,例如输入483,应输出字符串483
if((i=n/10)!=0) convert(i); //这句话的意思就是进行递归调用,经过递归能得到n的最高位
putchar(n%10+‘0’);
//但是要注意的是,这里的递归调用不仅仅是输出最高位的ACSII,而是输出所有位的ASCII
//如果想不明白,可以将递归调用当做函数的循环嵌套调用来考虑
}
这是递归调用特有的,能够输出所有数,谭浩强的书上在函数的地方讲过这个东西,不懂的可以翻书看看,
这就是
递归调用的步骤,知道这个,此题就好做了。
这是《C程序设计试题汇编》上指针章的一个题,
#include<stdio.h>
void convert(int n)
{
int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+‘0’);
}
void main()
{
int number;
printf(“Input an integer:”);
scanf("%d",&number);
printf(“Output:”);
if(number<0)
{putchar(’-’);
number=-number;
}
convert(number);
printf("\n");
}
没有在VC++里输入,可能看着不太规范。
先说一下运行步骤:
比如你输入的number是483
main()中调用convert(number);进入了转换函数。
void convert(int n)
{
int i;
if((i=n/10)!=0) //i=n/10,i不得0时,递归调用convert(i); 意思是当n不是 一位数时,会递归调用此函数。
convert(i);
putchar(n%10+‘0’);
}
1.第一次进入convert( int n)函数时,n=483 , i=n/10=58 非0,因此递归调用convert(48); 这时的n=483会被压入栈。
2.运算convert(48)时, n=48 , i=n/10=4非0,因此递归调用convert(4); 这时的n=48会被压入栈。
3.运算convert(4)时, n=4 , i=n/10=0,因此,输出putchar(n%10+‘0’); 4(字符4)。函数返回。
4.n=48出栈,输出putchar(n%10+‘0’); 8(字符8)。函数返回。
5.n=483出栈,输出putchar(n%10+‘0’); 4(字符4)。函数返回。
栈空,函数返回到主函数。
栈:先进后出
不懂的可以看看《数据结构C语言版》