私は比較的一般的にCとプログラミングを学び始めており、再帰を使って2つの数のGCDとLCMを求めるプログラムを作るように言われました。C再帰関数 - GCD
今私はいくつかの研削の後、一緒にこれを得ることができました。
#include<stdio.h>
int gcd(int a,int b);
int main()
{
int a,b,l,temp;
printf("Enter two numbers :\n");
scanf("%d%d",&a,&b);
if(a<b)
{
temp=a;
a=b;
b=temp;
}
l=gcd(a,b);
printf("GCD = %i\nLCM = %i",l,a*b/l);
return 0;
}
int gcd(int a,int b)
{
static int c;
c=a%b;
a=b;
b=c;
if(c!=0)
{
gcd(a,b);
}
else
return a;
}
私には何らかの理由で不明な点がありましたが、機能は「else」なしでは機能しません。より具体的には、次のようになります。
int gcd(int a,int b)
{
static int c;
c=a%b;
a=b;
b=c;
if(c!=0)
{
gcd(a,b);
}
return a;
}
割り当てには関係ありませんが、私はこの問題が何であるかを理解する必要があります。初心者として、私は何かすべての助けに感謝します。
質問があまりにも愚かであるかコードがあまりにも厄介であれば、事前にお詫びします。
なぜローカル変数は再帰関数 'static'ですか?彼らはいけません。 –
'if(c!= 0)'ブランチは値を返しません。 –
そして 'gdc'の呼び出しは返された値を破棄します。 –