C - 反转一个句子 - 递归 - 没有数组

时间:2015-02-24 02:31:27

标签: c recursion reverse sentence

void reverse()
{
    char c;
    scanf("%c", &c);
    if(c!='\n')
    {
        reverse();
        printf("%c", c);
    }
}

当' c == \ n'时,程序甚至无法进入' if'块。那么它如何打印转换后的句子呢?请说明'返回'发生以及它返回的地方。

2 个答案:

答案 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"相反。

希望这可以提供一些有关其工作原理的见解。