#include <stdio.h>
void reverseSentence();
int main()
{
printf("Enter a sentence: ");
reverseSentence();
return 0;
}
void reverseSentence()
{
char c;
scanf("%c", &c);
if( c != '\n')
{
reverseSentence();
printf("%c",c);
}
我尝试了这段代码,我知道它是正确的,但我不知道递归的原因。这看起来有点不直观。请问有人可以说明它的工作原理吗?另外,\n
究竟在做什么?(这就是我认为我的问题的答案所在的地方)。感谢。
答案 0 :(得分:2)
名称reverseSentence
对于递归而言非常糟糕。
它会读取一个字符并将其保存在局部变量中。
然后,如果角色不是换行符(== \n
),它将再次调用自己。这将以递归方式发生,直到输入换行符。之后,它将打印其角色。
因为在最后你将遍历调用堆栈,这将以相反的顺序调用不同的实例。 →字符串将反向输出
答案 1 :(得分:2)
我们假设您正在尝试输入单词&#34; elf&#34; (最后用#34; \ n&#34;)字符。
该程序应打印:&#34; fle&#34;。
程序扫描&#39; l,它不是&#39; \ n&#39;因此输入reverseSentence()。 C =&#39;升&#39;
程序扫描&#39; f,#not;&#39; \ n&#39;因此输入reverseSentence()。 C =&#39; F&#39;
我希望帮助
答案 2 :(得分:0)
scanf
&#34;消费&#34;它读取的char,这意味着在函数的下一次调用中,该行将缩短1个字符,因为前一个递归调用已经使用了该字符。