gpt4 book ai didi

function - 如何从递归函数delphi/pascal返回 bool 值

转载 作者:行者123 更新时间:2023-12-03 19:40:34 26 4
gpt4 key购买 nike

我正在制作一个用于学习目的的程序,这就是为什么我使用递归来获得更多分数的原因,尽管迭代方法会更可行。我已经使用此算法来验证电子邮件地址,以确保其格式为 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;

其中 email 是从主程序传递的电子邮件,I 是每个字符的计数,而 step 是验证的距离。

最佳答案

我想这可能是你的意思:

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;

请注意,这不依赖于任何全局变量 - 您可以递归调用 ValidEmail,沿着
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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com