一道简单的c语言,它是如何实现递归调用的?

#include<stdio.h>
void main()
{void f(int x);
int a;
scanf("%d",&a);
f(a);
}
void f(int x)
{
int i;
if((i=x/10)!=0)
f(i);
putchar(x%10+'0');
putchar(' ');
}
输入一个整数,将整数转换成字符串。比如输入48,那么就要去将4转换成字符,那么那个8是怎么转换的?

第1个回答  2013-12-26
#include<stdio.h>
void f(int x);
void main()
{
int a;
scanf("%d",&a);
f(a);
}
void f(int x)
{
int i;
if((i=x/10)!=0)//如果输入是48,此处i值为48/10==4
f(i);//f(4)再次调用f()函数,输出4
putchar(x%10+'0');//返回第一次调用x%10就是8
putchar(' ');
}
不好意引用一下php_baika的程序
我也是初学者,以下是我的见解
c语言的程序是一条一条执行的,只要理解这一点不难分析出
当第一次执行到f(i); 时x=48,i=4,以下的语句暂时不执行 进入递归调用void f(int x) 这时执行到f(i);时x=4,i=0 不满足if条件所以 输出putchar 。
因为已经到尽头了,返回上一次x=48,i=4语句继续往下执行putchar里得x=48
第2个回答  2013-12-26

递归调用,然后一层层返回

#include<stdio.h>
void f(int x);
void main()
{  
 int a;
 scanf("%d",&a);
 f(a);
}
void f(int x)
{
 int i;
 if((i=x/10)!=0)//如果输入是48,此处i值为48/10==4
 f(i);//f(4)再次调用f()函数,输出4
 putchar(x%10+'0');//返回第一次调用x%10就是8
 putchar(' ');
}

追问

比如输入48 第二次调用时输出4;然后那个8怎么办 怎么返回的 我刚学的 可不可以把这个具体过程给我讲一下? 而且这个函数式void类型的 怎么返回呢?

追答

参考一下
http://baike.baidu.com/link?url=jtuXCg4UB40lgGHusctwY-2bqJhO9vaPX5LvCywVZLJ0Hx4vTIJxD3C00tn9aH4qU1eZxBnf79rw_LqyMltHJa
你就明白了,最主要的是学会自己跟踪调试

本回答被提问者和网友采纳
第3个回答  2013-12-26
#include<stdio.h>
void main()
{void f(int x);
int a;
scanf("%d",&a);
f(a);
}
void f(int x)
{
int i;
if((i=x/10)!=0)
f(i);
putchar(x%10+'0');//实际上就是以字符0为基准上相加啊,函数一直递归到被递归值求商为0为止。
putchar(' ');
}