再起的なので、対象枚数が増えるほど、指数関数的に計算数が増えていく。
use std::env; fn hanoi(n: i32, src: String, dist: String, via: String) { // n, 移動元、移動先、経由 if n > 1 { hanoi(n - 1, src.clone(), via.clone(), dist.clone()); println!("{} -> {}", src.clone(), dist.clone()); hanoi(n - 1, via.clone(), dist.clone(), src.clone()); } else { println!("{} -> {}", src.clone(), dist.clone()); } } fn main() { let args: Vec<String> = env::args().collect(); let n = args[1].parse::<i32>().unwrap(); println!("入力値:{}", n); hanoi(n, "a".to_string(), "b".to_string(), "c".to_string()); }
Compiling rust v0.1.0 (/home/vagrant/dev/algorithm/rust)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.26s
Running `target/debug/rust 3`
入力値:3
a -> b
a -> c
b -> c
a -> b
c -> a
c -> b
a -> b
### 考察
3 a b c (a->b)
2 a c b (a->c)
1 a b c (a->b)
1 b c a (b->c)
3 a b c (a->b)
2 ….