『アルゴリズムとデータ構造』を Rust で実装してみるシリーズ。4章の再帰と分割統治法。
前回 → https://quantized-cube.com/rust-recursive-01
今回はユークリッドの互除法。
use proconio::input;
fn input(use_default_values: bool) -> (u64, u64) {
if use_default_values {
let m = 51;
let n = 15;
return (m, n);
} else {
println!("Input n and a:");
input! {
m: u64,
n: u64,
}
return (m, n);
}
}
fn gcd(m: u64, n: u64) -> u64 {
match n {
// ベースケース
0 => m,
// 再帰呼び出し
_ => gcd(n, m % n),
}
}
/// ユークリッドの互除法によって最大公約数を求める
pub fn code_4_4(use_default_values: bool) -> u64 {
// 入力
let (m, n) = input(use_default_values);
gcd(m, n)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn code_4_4_works() {
assert_eq!(code_4_4(true), 3);
}
}
GitHub のリポジトリはこちら https://github.com/quantized-cube/book_algorithm_solution_rust
コメント