【发布时间】:2013-02-15 15:04:05
【问题描述】:
gcd 应该是一个递归函数。它应该返回无效。它应该取两个正整数并将 GCD 放在第三个参数中。
这是我的编码 gcd 函数。但是,我意识到它不是递归函数。我将如何更改此代码使其成为递归函数?
void gcd(int *x, int *y) {
int i;
getValuesForGCD(x, y);
for (i = *x; i >= 1; i--)
{
if (*x % i == 0 && *y % i == 0)
{
printf("The GCD of %d and %d is %d", *x, *y, i);
break;
}
}
}
【问题讨论】:
-
将非递归函数转换为递归函数听起来不太实用。通常人们试图消除递归,而不是引入它。你为什么要引入递归?
-
为什么是指针?附带说明一下,修改上面的算法,例如
i从 min(x,y) 开始。 -
@RaymondChen 有些东西以递归方式更具可读性和自然性,
gcd就是其中之一。虽然,在这种情况下,它可能是一个硬件...... -
我不知道这里发生了什么,但请停止破坏您的问题。我暂时锁定它。