一小段递归的代码, 求解释
- C/C++ code
#include <stdio.h>void rev(void) { char c; c = getchar(); if (c == '#') { printf("%c", c); } else { rev(); printf("%c", c); }}int main(void) { rev(); printf("\n"); return 0;}请详细解释一下这恶心的递归
[解决办法]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出
[解决办法]
输入一个字符,如果是'#'就输出并且结束,如果不是的话,输出该字符并进行下一次的输入。
[解决办法]
一直让你输入,直到输入到#为止,打印出#,然后倒叙打印之前的输入
[解决办法]
[解决办法]
补充:每次输入不是#的时候就继续调用rev(),直到#,打印#。
然后返回到上一个else打印出最后输入的非#字符。