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 展开
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 展开
1个回答
展开全部
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.
可以改成:
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这两个全局变量在子程序中还用也没有问题,不过,还是谢谢你了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询