int gcd (int a, int b)
{
if (b == 0)
return a;
if (a == 0)
return b;
return gcd (b, a % b);
}
gcd(5,15)的结果是什么?
我最终得到了15分,但我不确定它是否正确,所有循环都让我感到困惑。
答案 0 :(得分:4)
以下是按顺序进行的递归调用
gcd(5, 15)
gcd(5, 5) # Because 5 % 15 = 5
gcd(5, 0)
因此gcd(5,15)的返回值为5
答案 1 :(得分:0)
设a = 5且b = 15;
在第一个循环中,我们检查a和b中的任何一个是否为0,它们不是,所以我们调用
GCD(15,0);因为5%15 = 5。
所以a = 15,b = 5.
我们称之为gcd(5,15%5),即gcd(5,0)。答案是5;
答案 2 :(得分:0)
以这种方式查看递归调用:
gcd(5, 15)
|
gcd(15, 5 (as 5 % 15) ) // 'b' simply takes position of 'a'
|
gcd(5, 0 (as 15 % 5) )
|
if (b == 0) return a; // a is 5, so returned value is 5.
return 5;
return 5;
return 5;
答案 3 :(得分:0)
gcd (5, 15)
会返回gcd (15, 5 % 15) == gcd (15, 5)
,而gcd (5, 5 % 15) == gcd (5, 5)
会返回gcd (5, 5 % 5) == gcd (5, 0) == 5
,返回printf
。所以你应该回来5。
查看正在发生的事情的好方法是在函数的开头插入gcd(5,15)
gcd(15,5)
gcd(5,0)
5
语句,并在两个最终返回点处显示发生的情况:
def gcd (a, b):
print("gcd({0},{1})".format(a, b))
if b == 0:
print(a)
return a
if a == 0:
print(b)
return b
return gcd (b, a % b)
gcd(5,15)
示例Python实现:
Layout.fillWidth: true