我只能找到关于如何递归和迭代地实现 gcd 函数的帖子,但是我找不到这个。我确定它在 Stackoverflow 上,但是我找不到它,所以如果它是重复的帖子,我深表歉意。
我查看了维基百科(此处)的分析,无法理解它们的重复关系。
考虑以下在 C 中递归实现的 GCD 函数的实现。它的前提条件是两个数字都必须是正数,但与运行时间无关。
int gcd( int const a, int const b ) {
// Checks pre conditions.
assert( a >= 0 );
assert( b >= 0 );
if ( a < b ) return gcd( b, a );
if ( b == 0 ) return a;
return gcd( b, a % b );
}
对运行时间进行分析,我发现每个操作都是 O(1),因此我们知道到目前为止的递归关系是:T(n) = O(1) + ???。现在要分析递归调用,我不确定如何将 a (mod b) 解释为我的递归调用以正确说明我的递归关系。