这个函数可以让p逆序输出,为什么呀?救命,求解答!
void fan(char*p,int i)
{
if(p[i+1]!='\0')
fan(p,i+1);
printf("%c",p[i]);
}
这个函数可以让p逆序输出,为什么呀?救命,求解答!
void fan(char*p,int i)
{
if(p[i+1]!='\0')
fan(p,i+1);
printf("%c",p[i]);
}
你提的这个问题还是很好的,这个是个经典的递归调用,理解完这个函数,那么你的递归函数就基本没问题了。。。。
我们在学习C 语言函数调用的时候,只是看到一行一行的调用,但是程序在编译成机器码之后才能运行的,如果你学过汇编就可以知道,遇到函数调用之后,机器码会为了产生一个跳转。
例如,你这个函数当if 成立之后会再次进入fan(),那么这就会jump 到函数fan 的地方继续执行,这样下去,每次if 进来都会进入fan 地址进行运行(当然每次的参数都是不同的)。当你一直到最后一次fan(),发现if 无法满足了,那么只好打印这一次fan() 的最后一个函数跳转,即printf 函数跳转。这里是你程序的第一次打印哦。。。
以此类推,当最后一次fan() 跳出回到上一次跳转地方就会发现倒数第二次的fan() 中还有个printf。。。。以此类推。。。一直到第一次fan() 的printf执行。。。。
所以,当你运行的时候就会发现是倒序输出。。。。
希望对你有帮助,很高兴你加入C 语言大家庭,有问题欢迎随时交流。。。。