void reverse()
{
char c;
scanf("%c", &c);
if(c!='\n')
{
reverse();
printf("%c", c);
}
}
当' c == \ n'时,程序甚至无法进入' if'块。那么它如何打印转换后的句子呢?请说明'返回'发生以及它返回的地方。
答案 0 :(得分:3)
当' c == \ n'时,它将是递归的结束,函数将不再调用自身并返回到最后一次调用,该调用继续在#39行上; printf("%c",c)',从而打印字符串的最后一个字符,然后返回到第二个最后一个调用,依此类推..
答案 1 :(得分:1)
让我们手动运行代码。想象一下,我们输入了"foobar"
。我们对着计算机处理的每一条指令都是正确的。如果我们递归,我们会在跟踪事情时缩进。如果我们这样做,我们可以看到执行的指令序列是:
scanf() // reads 'f'
if ('f' != '\n')
scanf() // reads 'o'
if ('o' != '\n')
scanf() // reads 'o'
if ('o' != '\n')
scanf() // reads 'b'
if ('b' != '\n')
scanf() // reads 'a'
if ('a' != '\n')
scanf() // reads 'r'
if ('r' != '\n')
scanf() // reads '\n'
if ('\n' != '\n')
printf('r')
print('a')
print('b')
print('o')
print('o')
print('f')
每个缩进都是对reverse()
的递归调用。如您所见,printf()
命令的顺序与输入"foobar"
相反。
希望这可以提供一些有关其工作原理的见解。