C语言 递归 整数转字符串 原理 (课本74页)

#include
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");
}
 
  
比如你输入的number是1234
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=1234 , i=n/10=123 非0,因此递归调用convert(123); 这时的n=1234会被压入栈。
2.运算convert(123)时, n=123 , i=n/10=12非0,因此递归调用convert(12); 这时的n=123会被压入栈。
3.运算convert(12)时, n=12 , i=n/10=1非0,因此递归调用convert(1); 这时的n=12会被压入栈。
4.运算convert(1)时, n=1 , i=n/10=0,因此,输出putchar(n%10+'0');            1(字符1)。函数返回。
5.n=12出栈,输出putchar(n%10+'0');                     2(字符2)。函数返回。
6.n=123出栈,输出putchar(n%10+'0');                     3(字符3)。函数返回。
7.n=1234出栈,输出putchar(n%10+'0');                     4(字符4)。函数返回。
栈空,函数返回到主函数。
追问
你别生气啊,为什么1234 123 12 1 依次入栈, 输出putchar(n%10+'0');      1(字符1)   函数返回后,12   123  1234 又依次出栈
回答
首先,1没有入栈

我们把convert()函数当作一个运算来描述(实际上它就是一种计算机运算)
运算convert(1234)时,程序运行到if语句时,会再次转入convert()函数去运算convert(123)
当convert(123)结束后,才会去执行if语句后面的代码。------------这里要好好理解一下

在convert()函数中再次调用convert()函数时,系统需要把当前的数据状况存储下来,即:把1234压入栈中,这样才不会造成数据混乱。------------------这句话主要来说明,为什么会用到栈。栈的特点,先入后出

 
  
总结:栈的应用
 
  
 
 

你可能感兴趣的:(C语言)