有人可以解释一下这段代码如何恢复用户输入(这是递归):
Procedure revert;
Var text:char;
Begin
Read (text)
If (text <> '.') Then revert;
Write(text);
End;
答案 0 :(得分:1)
让我们通过一个例子来做。 想象一下,用户输入&#39; Hello。&#39;
text
等于&#39; H&#39;条件(text <> '.')
为真。revert
。text
变量,它将会发生
填写用户输入的第二个字母。在这种情况下它
&#39; E&#39 ;. (text <> '.')
再次成立。所以调用了revert
再一次。text
变量,它将会发生
填写用户输入的第三个字母。在这种情况下它
&#39;升&#39; (text <> '.')
再次成立。所以调用了revert
再一次。text
变量,它将会发生
填写用户输入的第三个字母。在这种情况下它
&#39;升&#39; (text <> '.')
再次成立。所以调用了revert
再来一次。 text
变量,它将会发生
填写用户输入的第五个字母。在这种情况下它
&#39;○&#39; (text <> '.')
再次成立。所以调用了revert
再来一次。 text
变量,它将会发生
填写用户输入的第六个字母。在这种情况下它
&#39;&#39; (text <> '.')
是假的! revert
不会
被称为。text
变量的值将写入
安慰。在这种情况下,它是&#39;。&#39;。 revert
的第六次调用。它正在清理堆栈
第六个text
变量将从中删除。该计划是
回到它来自的位置:第五次打电话给
revert
。 text
变量的值将写入
安慰。在这种情况下,它是&#39; o&#39;。revert
的第五次调用。它正在清理堆栈
第五个text
变量将从中删除。该计划是
回到它来自的位置:第四次打电话给
revert
。text
变量的值将写入
安慰。在这种情况下,它是&#39; l&#39;。revert
的第四次调用。它正在清理堆栈
第四个text
变量将从中删除。该计划是
回到它来自的位置:第三次打电话给
revert
。text
变量的值将写入
安慰。在这种情况下,它是&#39; l&#39;。revert
的第三次调用。它正在清理堆栈
第三个text
变量将从中删除。该计划是
回到它来自的位置:第二次打电话给
revert
。text
变量的值将写入
安慰。在这种情况下,它是&#39;。revert
的第二次调用。它正在清理堆栈
第二个text
变量将从中删除。该计划是
回到它来自的位置:最初的呼叫
到revert
。text
变量的值将写入
安慰。在这种情况下,它是&#39; H&#39; revert
的初始调用。它正在清理堆栈
第一个text
变量将从中删除。该计划是
回到原来的位置:我们不知道。
也许程序结束答案 1 :(得分:-2)
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));
}
}
}