Common/Utilities: Explicit tail recursion to keep the compilers happy.

This commit is contained in:
Treeston
2019-08-12 14:19:22 +02:00
parent 1c2b1cbba8
commit 31b5632c00

View File

@@ -112,11 +112,13 @@ namespace advstd
template <typename T1, typename T2> template <typename T1, typename T2>
constexpr std::enable_if_t<advstd::is_unsigned_v<T1> && advstd::is_unsigned_v<T2>, std::common_type_t<T1, T2>> gcd(T1 m, T2 n) constexpr std::enable_if_t<advstd::is_unsigned_v<T1> && advstd::is_unsigned_v<T2>, std::common_type_t<T1, T2>> gcd(T1 m, T2 n)
{ {
if (m < n) while (n)
return gcd(n, m); {
if (!n) std::swap(m,n);
return m; if (m <= n)
return gcd(n, m%n); n %= m;
}
return m;
} }
// C++17 std::lcm // C++17 std::lcm