作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个用于学习目的的程序,这就是为什么我使用递归来获得更多分数的原因,尽管迭代方法会更可行。我已经使用此算法来验证电子邮件地址,以确保其格式为 L@L.L。我正在使用递归来验证每个实例中的每个字符。一旦递归到达第 6 步,则电子邮件有效,否则我希望该函数返回 false。有人可以帮我解决这个问题,因为我当前的解决方案必须使用全局变量,否则每个实例都会将局部变量重置为 false。我知道该算法并不完美,但我真的不想使用全局变量,因为它将成为一个庞大程序的一部分。
一些我不知道该怎么做的可能解决方案:
1. 通过每个递归实例传递一个 bool 值,并在最终实例中将其设置为 true。这可以通过 ref 或 val 以某种方式使用?然后通过堆栈传回
2. 使用函数本地的局部变量,而不是每个在执行过程中不会改变的实例
无论如何这里是代码:
var
Valid:boolean;
Function ValidEmail(Email:string; I:integer; Step:integer):boolean;
const
AlphaChars=['a'..'z', 'A'..'Z'];
begin
case Step of
1:If Email[I] in AlphaChars then
ValidEmail(Email, I+1, 2);
2:If Email[I] in AlphaChars then
ValidEmail(Email, I+1, 2)
else if Email[I] = '@' then
ValidEmail(Email, I+1, 3);
3:If Email[I] in AlphaChars then
ValidEmail(Email, I+1, 4);
4:If Email[I] in AlphaChars then
ValidEmail(Email, I+1, 4)
else if Email[I]='.' then
ValidEmail(Email, I+1, 5);
5:If Email[I] in AlphaChars then
ValidEmail(Email, I+1, 6);
6:Valid:=True;
end;
if Valid then
ValidEmail:=true;
end;
最佳答案
我想这可能是你的意思:
Function ValidEmail(Email:string; I:integer; Step:integer):boolean;
const
AlphaChars=['a'..'z', 'A'..'Z'];
begin
case Step of
1:If Email[I] in AlphaChars then
Result := ValidEmail(Email, I+1, 2);
2:If Email[I] in AlphaChars then
Result := ValidEmail(Email, I+1, 2)
else if Email[I] = '@' then
Result := ValidEmail(Email, I+1, 3);
3:If Email[I] in AlphaChars then
Result := ValidEmail(Email, I+1, 4);
4:If Email[I] in AlphaChars then
Result := ValidEmail(Email, I+1, 4)
else if Email[I]='.' then
Result := ValidEmail(Email, I+1, 5);
5:If Email[I] in AlphaChars then
Result := ValidEmail(Email, I+1, 6);
//6:
else
Result := True;
end;
end;
Function ValidEmail(Email:string; I:integer; Step:integer):boolean;
const
AlphaChars=['a'..'z', 'A'..'Z'];
begin
case Step of
...
7 : Result := ValidEmail(EMail, i, SomeOtherStep);
else
Result := True;
end;
end;
关于function - 如何从递归函数delphi/pascal返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27360003/
我是一名优秀的程序员,十分优秀!