递归是指一个函数调用自身的过程,这种调用方式被称为递归调用。在递归函数中,函数会不断地调用自身,直到满足某个条件才停止递归。
在代码中,函数reverse_str
在调用自身之前,会先将指针向后移动一位,也就是指向下一个字符,然后再进行递归调用。由于递归是从内层函数开始执行的,所以最先调用的是最后一个字符的输出语句,而最后一个字符是在最后一次递归调用结束之后才输出的。
举个例子,如果输入的字符串为"Hello World!",则函数reverse_str
的调用顺序如下:
reverse_str("H")
reverse_str("e")
reverse_str("l")
reverse_str("l")
reverse_str("o")
reverse_str(" ")
reverse_str("W")
reverse_str("o")
reverse_str("r")
reverse_str("l")
reverse_str("d")
putchar("!")
可以看到,在执行完第12步之后,整个递归调用过程才结束,程序才能继续往下执行。
总的来说,递归函数在执行时会不断地调用自身,每一次调用都会将原问题分解成更小的子问题。在本例中,函数reverse_str
通过递归调用将字符串依次倒序输出,每次调用都只处理一个字符,最终完成整个字符串的反转输出。
void reverse_str(char *p)
{
if(*p)
{
reverse_str(p+1);
putchar(*p);
}
}