pascal用递归求m与n的最大公约数.求大神指教

programexe;varm,n:integer;functiongcd(m,n:integer):integer;beginifn=0thengcd:=melsegc... program exe;
var
m,n:integer;
function gcd(m,n:integer):integer;
begin
if n=0
then gcd:=m
else gcd(n,m mod n);
end;

begin
readln(m);readln(n);
writeln(gcd(m,n));
end.

这个程序的运行结果为什么不论输什么数都是-23260
展开
 我来答
243900764
2012-09-08 · TA获得超过144个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:162万
展开全部
LZ要注意 你定义的n,m 都是全局变量 所以在辗转相除法的gcd中会被改变他的值 从而使程序错误
可以改成:

program exe;
var
m,n:integer;
function gcd(a,b:integer):integer;
begin
if b=0
then gcd:=a
else gcd(b,a aod b);
end;

begin
readln(m);readln(n);
writeln(gcd(m,n));
end.
追问
好吧,我已经知道怎么改了,应该再改成“else gcd:=gcd(b,a mod b);”而且,就算两个m,n这两个全局变量在子程序中还用也没有问题,不过,还是谢谢你了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式