Программирование/Примеры программ на языке программирования Rust: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 1:
== Поиск [[w:факториал|факториала]], в [[w:Рекурсивная функция|рекурсивном]] и [[w:Итерация|итеративном]] стилях ==
 
<syntaxhighlight lang="rust">
Строка 39:
println!("Iterative result: {}", fac_iter(10));
println!("Lambda result: {}", fac_lambda(10));
}
</syntaxhighlight>
 
== Поиск [[w:числа Фибоначчи|чисел Фибоначчи]] в рекурсивном и итеративном стилях ==
 
<syntaxhighlight lang="rust">
/// Классическая рекурсивная версия
/// без хвостовой рекурсии
fn fib_recursive(n: u64) -> u64 {
match n {
0 | 1 => n,
n => fib_recursive(n - 1) + fib_recursive(n - 2),
}
}
 
/// версия с хвостовой рекурсией
fn fib_tail_recursive(n: u64) -> u64 {
fn in_fib(n: u64, current: u64, next: u64) -> u64 {
match n {
0 => current,
n => in_fib(n - 1, next, current + next),
}
}
in_fib(n, 0, 1)
}
 
/// итеративная версия
fn fib_iterative(n: u64) -> u64 {
let (mut cur, mut next) = (0u64, 1u64);
for _ in 0u64..n {
let tmp = cur + next;
cur = next;
next = tmp;
}
cur
}
 
fn main() {
let fns = vec![(fib_recursive as fn(u64) -> u64, "recursive"),
(fib_tail_recursive as fn(u64) -> u64, "tail recursive"),
(fib_iterative as fn(u64) -> u64, "iterative")];
 
for (f, desc) in fns {
let r = (0u64..10).map(f).collect::<Vec<u64>>();
println!("{} implementation:\n{:?}\n", desc, r);
}
}
</syntaxhighlight>