此时s是 字符掘唯串a 第一个字符的地址.
t = *s++相当于t = *ss++
s++使得s指向字符串a中的下一个字符。
接着递归调用fun(s)
s 每指向一个字符, 就递归调用一次, 即递归调用进行了5次, s 分别指向 '1', '2', '3', '4', '\0'
fun()里的if(*s)相当于if(*s != '\0'), 即第五次调用时不会再继续调用新的fun()了,
而是直接返回上判芹培一个fun().
这时s指向首芹 '4', 即 a[3]
接着依次执行第4, 3, 2, 1个fun()的
if(t!='\0') putchar(t)
因此在屏幕上打印出4321
最后返回到main(),
退出程序.
递归调用是一种特殊的嵌套调用,是某个函数调用自己或者是调用其他函数后再次调用自己的,只要函数之间互相调用能产生循环的则一定是递归调用,递归调用一种解决方案,一种是逻辑思想,将一个大工作分为逐渐减小的小工作。
递归函毕衡数特点:
1、函数要直接或间接调用自身。
2、要有递归终止条件检查,即递归终止的条件被满足后,则不再调用自身函数。
3、如果不满足递归终止的条件,则调用涉及递归调用的表达式。在调用函数自身时,有关终止条件的参数要发生变化,而且需向递归终止的方向变化。
扩展资料:
递归调用的过程:
递归调用之前的语句是从上嫌数液到下的,函数调用之后的语句呢是从下到上的,因为后面的语句要等最下层或者最里面最后调用的那个函数执行之后不再调用了开始执行,然后返回上一层的时候再执行上一层函数调用后面的语句。并且特别注意的是,每次函数返回后直接就是函数调用后面的语句。
递归其实就是利用了函数调用的一些特点,很巧妙的不断调用自己,把一个很大的问题分成了很多部分,让每一个函数解决一部分,并且上一层的结果编译器给我们保留了起来,返回的时候还能用。
所以递归调用一定要是每深入一层都会把问题变得越来越小,而且最后能解决,不芹物然就会无限制的调用自己,形成一个无限的循环,最后造成栈的溢出,最后程序崩溃。
参考资料来源:百度百科-递归调用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)