Delphi 带递归函数的数字系统转换-返回值错误
我必须做一个程序,把十进制的数字转换成另一个以2到9为基数的数字,就像我的第一个问题一样 但是这次我必须使用递归函数。所以我来了:Delphi 带递归函数的数字系统转换-返回值错误,delphi,recursion,number-systems,Delphi,Recursion,Number Systems,我必须做一个程序,把十进制的数字转换成另一个以2到9为基数的数字,就像我的第一个问题一样 但是这次我必须使用递归函数。所以我来了: function cambiarBase(n,b: integer): string; Begin if n < b then cambiarBase := inttostr(n) else cambiarBase := inttostr(n mod b) + cambiarBase(n div b, b); End; 我遇到的问题是:用函数的方式
function cambiarBase(n,b: integer): string;
Begin
if n < b then
cambiarBase := inttostr(n)
else
cambiarBase := inttostr(n mod b) + cambiarBase(n div b, b);
End;
我遇到的问题是:用函数的方式,它以相反的顺序给出数字
e、 基9中的g.301是364,但其显示为463。但是如果我在if语句之后使用ReverseString函数,那么这个数字在示例中以不同的顺序显示,现在是634
但是,如果我在memo1.Lines.Add函数外部应用ReverseString函数,那么它将显示正确的转换
我想知道的是如何让函数本身返回正确的数字顺序
程序编译时没有任何错误
再次感谢您的阅读
LeoAM您只需颠倒连接顺序即可。而不是:
cambiarBase := inttostr(n mod b) + cambiarBase(n div b, b);
你写
cambiarBase := cambiarBase(n div b, b) + inttostr(n mod b);
如果您考虑一下这一点,很明显,连接应该是这样的。在该表达式中,inttostrn mod b项是不太重要的项,因此出现在右侧
值得一提的是,如果使用Result而不是函数名,我认为这段代码读起来会更好。特别是对于递归函数,从视觉上很难区分结果变量和递归调用。我会这样写:
function cambiarBase(n, b: Integer): string;
begin
if n < b then
// termination
Result := IntToStr(n)
else
// recursive step
Result := cambiarBase(n div b, b) + IntToStr(n mod b);
end;
接下来我们需要评估
cambiarBase(6, 4) = cambiarBase(1, 4) + inttostr(2)
最后是终止
cambiarBase(1, 4) = inttostr(1)
把所有的插头插在一起,你就有了
cambiarBase(27, 4) = inttostr(1) + inttostr(2) + inttostr(3)
您只需要颠倒连接的顺序。而不是:
cambiarBase := inttostr(n mod b) + cambiarBase(n div b, b);
你写
cambiarBase := cambiarBase(n div b, b) + inttostr(n mod b);
如果您考虑一下这一点,很明显,连接应该是这样的。在该表达式中,inttostrn mod b项是不太重要的项,因此出现在右侧
值得一提的是,如果使用Result而不是函数名,我认为这段代码读起来会更好。特别是对于递归函数,从视觉上很难区分结果变量和递归调用。我会这样写:
function cambiarBase(n, b: Integer): string;
begin
if n < b then
// termination
Result := IntToStr(n)
else
// recursive step
Result := cambiarBase(n div b, b) + IntToStr(n mod b);
end;
接下来我们需要评估
cambiarBase(6, 4) = cambiarBase(1, 4) + inttostr(2)
最后是终止
cambiarBase(1, 4) = inttostr(1)
把所有的插头插在一起,你就有了
cambiarBase(27, 4) = inttostr(1) + inttostr(2) + inttostr(3)
谢谢你,是我的错,我没想到要颠倒连接顺序。当我以相反的顺序得到结果时,我想我可以使用ReverseString函数。另外,在课堂上我们使用函数名而不是“result”,但我在这里提问时会注意使用它。如果他们在课堂上教你函数名,那就好了。经典的帕斯卡就是这样做的。特殊的结果变量是一个Delphi扩展。谢谢你,我的错,我没有想到反转串联的顺序。当我以相反的顺序得到结果时,我想我可以使用ReverseString函数。另外,在课堂上我们使用函数名而不是“result”,但我在这里提问时会注意使用它。如果他们在课堂上教你函数名,那就好了。经典的帕斯卡就是这样做的。特殊的结果变量是Delphi扩展。