我很困惑Recursion在这个例子中是如何工作的。如果输入'ABC \ n',则输出CBA。如果有人能够完成整个过程,我将非常感激。
local automtic myInput接收'ABC \ n'
然后检查myInput是否为'\ n'和EOF,这是我开始感到困惑的地方
我认为它说,A!='\ n'和A!= EOF所以ReverseLine()再次被调用,但那又是什么???
递归是如何工作的,我只是想了解这个过程
感谢
using namespace std;
void ReverseLine(){
int myInput;
myInput = cin.get();
if (myInput != '\n' && myInput != EOF)
ReverseLine();
if (myInput != EOF)
cout.put(myInput);
}
int main(){
ReverseLine();
return 0;
}
答案 0 :(得分:4)
也许扩展它会帮助你理解?
void ReverseLine() {
int myInput = 'a'
if (myInput != '\n' && myInput != EOF) {
int myInput = 'b'
if (myInput != '\n' && myInput != EOF) {
int myInput = 'c'
if (myInput != '\n' && myInput != EOF) {
int myInput = '\n'
if (myInput != '\n' && myInput != EOF)
ReverseLine(); // doesn't get called
cout.put(myInput);
}
if (myInput != EOF)
cout.put(myInput);
}
if (myInput != EOF)
cout.put(myInput);
}
if (myInput != EOF)
cout.put(myInput);
}
答案 1 :(得分:4)
当您调用ReverseLine时,它会读取一个字符。如果字符不是换行符或EOF,它会再次调用自己(recurses)来读取下一个字符,直到它遇到换行符,此时它会打印刚刚读取的字符,然后返回到ReverseLine,打印出它读取的字符和直到它返回到ReverseLine的初始调用,打印第一个字符读取,然后退出。
答案 2 :(得分:2)
递归很难理解。此示例依赖于局部变量概念。它将到达递归层的末尾,然后从最深的递归调用开始将局部变量myInput
打印到第一个。
我们假设您输入“123”。每个缩进都是ReverseInput()
的新本地范围。
myInput = 1
ReverseLine()
myInput = 2
ReverseLine()
myInput = 3
ReverseLine()
myInput = \n
prints 3
prints 2
prints 1
这是以相反的方式做事的常见技巧。
答案 3 :(得分:1)
这真的很简单。 ReverseLine函数在返回之前打印其输出。如果在
中键入* ABC \ n ,则这是事件序列1. First call to ReverseLine.
1.a **A** is typed.
1.b myInput is not equal to **\n or EOF**, so
2. Second call to ReverseLine
2.a **B** is typed.
2.b myInput is not equal to **\n** or **EOF**, so
3. Third call to ReverseLine
3.a **C** is typed.
3.b myInput is not equal to **\n** or **EOF**, so
4. Fourth call to ReverseLine
4.a **\n** is typed.
4.b myInput is equal to **\n**, so
4.c ReverseLine is **not** called
4.d myInput is **not** equal to **EOF**, so
4.e myInput (**\n**) is printed
4.f Fourth call to ReverseLine returns
3.c myInput is **not** equal to **EOF**, so
3.d myInput (**C**) is printed
3.e Third call to ReverseLine returns
2.c myInput is **not** equal to **EOF**, so
2.d myInput (**B**) is printed
2.e Second call to ReverseLine returns
1.c myInput is **not** equal to **EOF**, so
1.d myInput (**A**) is printed
1.e First call to ReverseLine returns
然后程序结束。