反转从控制台读取的文本

Reversing a text read from console

本文关键字:文本 读取 控制台      更新时间:2023-10-16

我试图理解递归函数,我试图制作一个反转从控制台读取的文本的函数。例如,如果输入"abcd",则输出将是"dcba"。

这就是我所拥有的(不是我自己想出来的(。

void reverse() {
char c;
c=getchar();
if(c!='n') 
reverse();
cout<<c;
}

用于测试目的。

大部分问题来自if(c!='n')(或者我直到现在都这么认为(。有没有关于这个函数如何工作的直观解释? 也许有没有更好的方法来构建函数(递归(?

递归函数使用调用堆栈来存储函数调用。最后一个调用的函数位于调用堆栈的顶部(后进先出(。

假设您的字符串是"ABCD",则会生成以下递归树:

  • A: 拨打reverse()

  • B: 拨打reverse()

  • C: 拨打reverse()

  • D: 拨打reverse()

  • n:此时,执行控制将传递回上一个调用,直到调用堆栈耗尽。

请注意,每次调用reverse()后都有一个挂起的cout,一旦执行控制权被传回,它就会执行。 因此,DCBA字符被打印到标准输出

n是新行的标记,所以你的 if 语句所做的只是检查行尾,如果是行尾,则打印出整个内容。