计算两个数字的GCD 的程序。
#include<stdio.h>
#include<conio.h>
int findgcd(int x,int y)
{
while(x!=y)
{
if(x>y)
{
return findgcd(x-y,y);
}
else
{
return findgcd(x,y-x);
}
}
return x;
}
void main()
{
int n1,n2,gcd;
clrscr();
printf("\n GCD Calculator [ Please Enter Positive Integer number. ]\n");
printf("\nEnter 1st numbers: ");
scanf("%d",&n1);
printf("\nEnter 2nd numbers: ");
scanf("%d",&n2);
if(n1>0 && n2>0)
{
gcd=findgcd(n1,n2);
printf("\nGCD of %d and %d is: %d ",n1,n2,gcd);
}
else
{
printf("\n Sorry, Wrong Input.");
}
getch();
}
是否有另一种方法可以用C中的递归来计算两个数字的GCD。
或者,如果没有递归,我怎么能以简单的方式编写这个程序?
答案 0 :(得分:2)
返回机制在此程序中非常正常。要了解多个return语句如何从函数中解析为单个返回点,您需要了解while
和if...else
的工作方式。
我建议你尝试将
这两个想法分开声明
return anyfunc();
是代码路径中遇到的单个返回点。它调用另一个函数,然后返回该函数返回的任何内容。由于if ... else ...
仅执行两个从属语句中的一个,因此将仅调用两个返回中的一个。最后一个捕获了循环的初始条件为假的情况,因此从未输入循环。
递归问题是一种不同的蠕虫,但你需要明确上述内容,否则递归会让你无可救药地混淆。 :(
答案 1 :(得分:0)
也许更清楚一点:
int findgcd(int x,int y)
{
if(x!=y)
{
if(x>y)
{
return findgcd(x-y,y);
}
else
{
return findgcd(x,y-x);
}
}
return x;
}
答案 2 :(得分:0)
return findgcd(x, y-x);
与以下内容相同:
int t = findgcd(x, y-x);
return t;
我希望这可以帮助您看到它只返回一个值。
答案 3 :(得分:0)
return findgcd(var1,var2)
是递归的。 findgcd()
一直在调用自己,直到条件语句while
不再为真 - 这实际上并不正确,它应该是if
。一旦不成立,它将返回输入的参数x
。返回x
后,堆栈将展开,直至gcd=findgcd(n1,n2);
被击中。