还原文本的递归方法

Recursive method to revert text

谁能解释一下这段代码如何还原用户输入(这是一个递归):

Procedure revert;
Var text:char;
Begin
  Read (text)
  If (text <> '.') Then revert;
  Write(text);
End;

举个例子吧。 假设用户输入 'Hello.'

  • 他输入了字母 'H'。
  • 因为 text 等于 'H' 条件 (text <> '.') 为真。
  • 所以revert又被调用了一次。
  • 现在堆栈上有第二个 text 变量,它将 填充用户输入的第二个字母。在这种情况下是 'e'。
  • 条件(text <> '.')再次成立。所以 revert 被称为 再一次。
  • 现在堆栈上有第三个 text 变量,它将 填充用户输入的第三个字母。在这种情况下是 'l'.
  • 条件(text <> '.')再次成立。所以 revert 被称为 再一次。
  • 现在堆栈上有第四个 text 变量,它将 填充用户输入的第三个字母。在这种情况下是 'l'.
  • 条件(text <> '.')再次成立。所以 revert 被称为 再次。
  • 现在堆栈上有第五个 text 变量,它将 填充用户输入的第五个字母。在这种情况下是 'o'.
  • 条件(text <> '.')再次成立。所以 revert 被称为 再次。
  • 现在堆栈上有第六个 text 变量,它将 填充用户输入的第六个字母。在这种情况下是 '.'.
  • 现在条件 (text <> '.') 为假! revert 不会 被调用。
  • 最上面的 text 变量的值将被写入 安慰。在本例中是“.”。
  • revert 的第六次调用现已完成。它正在清理堆栈,所以 第六个 text 变量将从中删除。该计划是 回到原来的位置:第五次调用 revert
  • 最上面的 text 变量的值将被写入 安慰。在本例中是 'o'.
  • revert 的第五次调用现已完成。它正在清理堆栈,所以 第五个 text 变量将从中删除。该计划是 回到原来的位置:第四次调用 revert.
  • 最上面的 text 变量的值将被写入 安慰。在这种情况下,它是 'l'.
  • 现在已完成对 revert 的第四次调用。它正在清理堆栈,所以 第四个 text 变量将从中删除。该计划是 回到原来的位置:第三次调用 revert.
  • 最上面的 text 变量的值将被写入 安慰。在这种情况下,它是 'l'.
  • revert 的第三次调用现已完成。它正在清理堆栈,所以 第三个 text 变量将从中删除。该计划是 回到原来的位置:第二次调用 revert.
  • 最上面的 text 变量的值将被写入 安慰。在这种情况下,它是 'e'.
  • revert 的第二次调用现已完成。它正在清理堆栈,所以 第二个 text 变量将从中删除。该计划是 回到原来的位置:最初的通话 至 revert.
  • 最上面的 text 变量的值将被写入 安慰。在这种情况下,它是 'H'.
  • 现在已完成对 revert 的初始调用。它正在清理堆栈,所以 第一个 text 变量将从中删除。该计划是 回到它来的地方:我们不知道。 也许程序结束
  • 字符串“.olleH”出现在屏幕上。
import java.io.*;
class revstr
{
    static String ans="";
    static String rev (String str)
    {
        if(str.length()==0)
            return ans;
        else
        {
            ans+=str.charAt(str.length()-1);
            return rev(str.substring(0,str.length()-1));
        }
    }
}