Loop execution flow in Rust - Time & Space Complexity
Loops run code multiple times, so their speed depends on how many times they repeat.
We want to know how the total work grows as the loop runs more times.
Analyze the time complexity of the following code snippet.
fn sum_numbers(numbers: &[i32]) -> i32 {
let mut total = 0;
for &num in numbers {
total += num;
}
total
}
This code adds up all numbers in a list and returns the total.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Adding each number to total inside the for-loop.
- How many times: Once for every number in the list.
As the list gets longer, the loop runs more times, doing more additions.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 additions |
| 100 | 100 additions |
| 1000 | 1000 additions |
Pattern observation: The work grows directly with the number of items.
Time Complexity: O(n)
This means the time to finish grows in a straight line with the list size.
[X] Wrong: "The loop runs a fixed number of times, so time is constant."
[OK] Correct: The loop runs once for each item, so if the list grows, the loop runs more times.
Understanding how loops affect time helps you explain code speed clearly and confidently.
"What if we added a nested loop inside the existing loop? How would the time complexity change?"
Practice
break statement do inside a Rust loop?Solution
Step 1: Understand the role of
Thebreakin loopsbreakstatement immediately stops the loop and exits it.Step 2: Compare with other loop controls
continueskips to the next iteration, butbreakends the loop entirely.Final Answer:
It stops the loop immediately and exits it. -> Option DQuick Check:
breakstops loop = C [OK]
- Confusing break with continue
- Thinking break pauses instead of stops
- Assuming break restarts the loop
for loop?Solution
Step 1: Identify the keyword to skip iteration
In Rust,continue;skips the rest of the current loop iteration and moves to the next.Step 2: Check other options for correctness
break;stops the loop,skip;andnext;are not valid Rust keywords for this purpose.Final Answer:
continue; -> Option BQuick Check:
Skip iteration = continue [OK]
- Using break instead of continue
- Using non-existent keywords like skip or next
- Omitting the semicolon
let mut count = 0;
loop {
count += 1;
if count == 3 {
break;
}
println!("{}", count);
}Solution
Step 1: Trace the loop iterations and print statements
Loop increments count from 0 to 1, prints 1; then 2, prints 2; when count is 3, break stops loop before printing.Step 2: Determine printed values
Only 1 and 2 are printed before break stops the loop.Final Answer:
1 2 -> Option CQuick Check:
Prints before break = 1 2 [OK]
- Assuming count 3 is printed
- Starting count from 1 instead of 0
- Confusing break and continue effects
for i in 1..5 {
if i == 3 {
continue
}
println!("{}", i);
}Solution
Step 1: Check syntax of continue statement
In Rust, statements likecontinuerequire a semicolon to end the statement.Step 2: Verify other parts of the code
The range1..5andprintln!usage are correct;continueis valid inside for loops.Final Answer:
Missing semicolon after continue -> Option AQuick Check:
Statements need semicolon = A [OK]
- Forgetting semicolon after continue
- Thinking continue is invalid in for loops
- Misreading range syntax
sum?
let mut sum = 0;
for i in 1..6 {
if i % 2 == 0 {
continue;
}
if i == 5 {
break;
}
sum += i;
}Solution
Step 1: Analyze loop iterations and conditions
Loop runs i from 1 to 5 (exclusive 6). For even i, continue skips adding. For i == 5, break stops loop before adding.Step 2: Calculate sum for valid i values
i=1 (odd, add 1), i=2 (even, skip), i=3 (odd, add 3), i=4 (even, skip), i=5 (break before add). sum = 1 + 3 = 4.Final Answer:
4 -> Option AQuick Check:
Sum odd before 5 = 4 [OK]
- Adding even numbers mistakenly
- Including 5 in sum despite break
- Confusing continue and break effects
Ready to prove it?
Pass the test and this pattern moves unknown
