アプリ版:「スタンプのみでお礼する」機能のリリースについて

入力した整数値の最大公約数を出力するプログラムを再帰呼び出しの形式で作れ、という課題が出ました。
再帰でない形式は下のように作れたのですが、再帰形式がどうしてもできません。どなたかご教授ください。

function gcd(a,b:integer):integer; {関数部}
var tmp:integer;
begin
if a<b then
begin
tmp:=b;
b:=a;
a:=tmp
end;
repeat
tmp:=b;
b:=a mod b;
a:=tmp
until b=0;
gcd:=a
end;

repeat {計算部、i=n=入力した個数、max=入力できる最大数}
i:=i+1;
n:=n+1;
data[i]:=x;
writeln('値:');
readln(x);
until (x=0) or (i=max);
if i>=2 then
begin
p:=gcd(data[1],data[2]);
if i>=3 then
begin
for i:= 3 to n do
begin
p:=gcd(p,data[i])
end;
writeln('最大公約数:',p)
end
else
begin
writeln('最大公約数:',p)
end;

A 回答 (1件)

gcd の再帰的な定義を素直にプログラムにすれば, そのまま再帰的な関数になります.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!