gpt4 book ai didi

delphi - 使用递归函数进行数字系统转换 - 返回值错误

转载 作者:行者123 更新时间:2023-12-03 18:27:03 24 4
gpt4 key购买 nike

我必须制作一个程序,我必须将十进制系统中的数字转换为另一个数字(以 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;

它需要 2 个整数变量,“n”是十进制数,“b”是基数,并返回一个带有转换后数字的字符串。在按钮过程中,我在 TMemo 中显示数字
memo1.Lines.Add(cambiarBase(n,b)); 

我遇到的问题是:使用函数的方式以相反的顺序给出数字
(例如,基数 9 中的 301 是 364,但它显示为 463)。但是,如果我在 if 语句之后使用 ReverseString 函数,那么它会以不同的顺序显示数字(在示例中,数字现在是 634)。

但是,如果我在 memo1.Lines.Add (函数外部)应用 ReverseString 函数,那么它会显示正确的转换。

我想知道如何让它通过函数本身返回正确的数字顺序。

该程序编译它没有任何错误。

再次感谢您的阅读。

利奥AM

最佳答案

你只需要颠倒串联的顺序。代替:

cambiarBase := inttostr(n mod b) + cambiarBase(n div b, b);

你写
cambiarBase := cambiarBase(n div b, b) + inttostr(n mod b);

如果您考虑这一点,很明显串联应该是这种方式。在该表达式中, inttostr(n mod b) term 是较不重要的术语,因此出现在右侧。

对于它的值(value),我认为如果你使用 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;

让我们通过一个简单的例子来说明。假设 27 base 4 等于 123 (16 + 2*4 + 3)。
cambiarBase(27, 4) = cambiarBase(6, 4) + inttostr(3)

接下来我们需要评估
cambiarBase(6, 4) = cambiarBase(1, 4) + inttostr(2)

最后终止
cambiarBase(1, 4) = inttostr(1)

把它们插在一起,你就有了
cambiarBase(27, 4) = inttostr(1) + inttostr(2) + inttostr(3)

关于delphi - 使用递归函数进行数字系统转换 - 返回值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22620481/

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