From e0274e07d0c6bf7c65ceb694176fce233f812181 Mon Sep 17 00:00:00 2001 From: Matthew Williamson Date: Thu, 5 Jan 2017 22:38:07 -0500 Subject: [PATCH] Create iterators4.rs Tackles https://github.com/carols10cents/rustlings/issues/15 . I think this allows for varying levels of difficulty depending on a users background. But ideally people can move there way up from 1, 2, 3 (Numbers below). 1. let mut result = 1; for i in 1..x + 1 { result *= i; } result 2. match x { 0 | 1 => 1, x => x * factorial(x - 1), } 3. (1..x + 1).product() --- standard_library_types/iterators4.rs | 59 ++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 standard_library_types/iterators4.rs diff --git a/standard_library_types/iterators4.rs b/standard_library_types/iterators4.rs new file mode 100644 index 0000000..e758bd1 --- /dev/null +++ b/standard_library_types/iterators4.rs @@ -0,0 +1,59 @@ +pub fn factorial(num: u64) -> u64 { + // Complete this function to return factorial of num + // Do not use: + // - return + // For extra fun don't use: + // - imperative style loops (for, while) + // - additional variables + // For the most fun don't use: + // - recursion + // Scroll down for hints. +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn factorial_of_1() { + assert_eq!(1, factorial(1)); + } + #[test] + fn factorial_of_2() { + assert_eq!(2, factorial(2)); + } + + #[test] + fn factorial_of_4() { + assert_eq!(24, factorial(4)); + } +} + + + + + + + + + + + + + + + + + + + + + + + + + +// In an imperative language you might write a for loop to iterate through +// multiply the values into a mutable variable. Or you might write code more +// functionally with recursion and a match clause. But you can also use ranges +// and iterators to solve this in rust.