Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c656dc0

Browse files
committed
Add recursion.rs
1 parent b2acb65 commit c656dc0

File tree

3 files changed

+100
-16
lines changed

3 files changed

+100
-16
lines changed

‎labocédai/src/lib.rs

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pub mod simple_challenges;
2+
pub mod recursion;
23

34
#[cfg(test)]
45
mod tests {
@@ -47,11 +48,60 @@ mod tests {
4748

4849
#[test]
4950
fn test_max_n_width_sub_array() {
50-
assert_eq!(max_n_width_sub_array_sum(&[1, 2, 5, 2, 8, 1, 5], 2), Some(10));
51-
assert_eq!(max_n_width_sub_array_sum(&[1, 2, 5, 2, 8, 1, 5], 4), Some(17));
51+
assert_eq!(
52+
max_n_width_sub_array_sum(&[1, 2, 5, 2, 8, 1, 5], 2),
53+
Some(10)
54+
);
55+
assert_eq!(
56+
max_n_width_sub_array_sum(&[1, 2, 5, 2, 8, 1, 5], 4),
57+
Some(17)
58+
);
5259
assert_eq!(max_n_width_sub_array_sum(&[4, 2, 1, 6], 1), Some(6));
5360
assert_eq!(max_n_width_sub_array_sum(&[4, 2, 1, 6, 2], 4), Some(13));
5461
assert_eq!(max_n_width_sub_array_sum(&[], 4), None);
5562
}
5663
}
64+
65+
mod recursion {
66+
use crate::recursion::*;
67+
#[test]
68+
fn test_power() {
69+
assert_eq!(power(2, 2), 2_usize.pow(2));
70+
assert_eq!(power(6, 1), 6_usize.pow(1));
71+
assert_eq!(power(2, 8), 2_usize.pow(8));
72+
assert_eq!(power(0, 2), 0_usize.pow(2));
73+
assert_eq!(power(2, 0), 2_usize.pow(0));
74+
}
75+
76+
#[test]
77+
fn test_factorial() {
78+
assert_eq!(factorial(3), 3 * 2 * 1);
79+
assert_eq!(factorial(5), 5 * 4 * 3 * 2 * 1);
80+
assert_eq!(factorial(1), 1);
81+
assert_eq!(factorial(0), 1);
82+
}
83+
84+
#[test]
85+
fn test_product_of_nums() {
86+
assert_eq!(product_of_nums(&[1, 2, 3]), Some(1 * 2 * 3));
87+
assert_eq!(product_of_nums(&[1, -2, 3]), Some(1 * -2 * 3));
88+
assert_eq!(product_of_nums(&[1, -2, 0]), Some(1 * -2 * 0));
89+
assert_eq!(product_of_nums(&[]), None);
90+
}
91+
92+
#[test]
93+
fn test_sum_up_to() {
94+
assert_eq!(sum_up_to(5), 0 + 1 + 2 + 3 + 4 + 5);
95+
assert_eq!(sum_up_to(1), 0 + 1);
96+
assert_eq!(sum_up_to(0), 0);
97+
}
98+
99+
#[test]
100+
fn test_fibonacci() {
101+
assert_eq!(fibonacci(4), 3);
102+
assert_eq!(fibonacci(10), 55);
103+
assert_eq!(fibonacci(28), 317811);
104+
assert_eq!(fibonacci(35), 9227465);
105+
}
106+
}
57107
}

‎labocédai/src/recursion.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
pub fn power(base: usize, exponent: usize) -> usize {
2+
if exponent == 0 {
3+
return 1;
4+
}
5+
base * power(base, exponent - 1)
6+
}
7+
8+
pub fn factorial(num: usize) -> usize {
9+
if num <= 1 {
10+
return 1;
11+
}
12+
num * factorial(num - 1)
13+
}
14+
15+
pub fn product_of_nums(nums: &[isize]) -> Option<isize> {
16+
if nums.len() == 0 {
17+
return None;
18+
}
19+
let next_product = product_of_nums(&nums[1..]);
20+
if let Some(product) = next_product {
21+
return Some(nums[0] * product);
22+
}
23+
Some(nums[0])
24+
}
25+
26+
pub fn sum_up_to(num: usize) -> usize {
27+
if num == 0 {
28+
return 0;
29+
}
30+
num + sum_up_to(num - 1)
31+
}
32+
33+
pub fn fibonacci(n: usize) -> usize {
34+
/* returns the nth number in the fibonacci sequence */
35+
if n == 1 || n == 2 {
36+
return 1;
37+
}
38+
fibonacci(n - 1) + fibonacci(n - 2)
39+
}

‎labocédai/src/simple_challenges.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
pub fn sum_up_to(num: usize) -> usize {
32
(0..=num).into_iter().fold(0, |acc, n| acc + n)
43
}
@@ -72,21 +71,17 @@ pub fn max_n_width_sub_array_sum(nums: &[isize], n: usize) -> Option<isize> {
7271
if nums.len() < n {
7372
return None;
7473
}
75-
let mut max_sum:Option<isize> = None;
76-
let mut j = n;
74+
let mut sum = sum_nums(&nums[0..n]);
75+
let mut max_sum = sum;
7776
for (i, _) in nums.iter().enumerate() {
78-
if i + n <= nums.len() {
79-
let sum = sum_nums(&nums[i..j]);
80-
match max_sum {
81-
Some(s) => {
82-
if sum > s {
83-
max_sum = Some(sum);
84-
}
85-
},
86-
None => max_sum = Some(sum)
77+
if i > 0 && i + n <= nums.len() {
78+
sum -= nums[i - 1];
79+
sum += nums[i + n - 1];
80+
81+
if sum > max_sum {
82+
max_sum = sum
8783
}
88-
j += 1;
8984
}
9085
}
91-
max_sum
86+
Some(max_sum)
9287
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /