Function declaration and definition in C++ - Time & Space Complexity
When we write functions, it's important to know how their running time changes as the input grows.
We want to see how the work inside a function scales with input size.
Analyze the time complexity of the following code snippet.
// Function declaration
int sumArray(int arr[], int n);
// Function definition
int sumArray(int arr[], int n) {
int total = 0;
for (int i = 0; i < n; i++) {
total += arr[i];
}
return total;
}
This function adds up all numbers in an array of size n and returns the total.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that adds each element to total.
- How many times: It runs once for each element, so n times.
As the array gets bigger, the function does more additions, one per element.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 additions |
| 100 | 100 additions |
| 1000 | 1000 additions |
Pattern observation: The work grows directly with the number of elements.
Time Complexity: O(n)
This means the time to finish grows in a straight line as the input size grows.
[X] Wrong: "The function runs in constant time because it just adds numbers."
[OK] Correct: The function must add each number one by one, so more numbers mean more work.
Understanding how function work time grows helps you explain your code clearly and shows you think about efficiency.
"What if we changed the function to sum only the first half of the array? How would the time complexity change?"
Practice
Solution
Step 1: Understand function declaration role
A function declaration informs the compiler about the function's name, return type, and parameters without providing the actual code.Step 2: Differentiate declaration from definition
The function definition contains the actual code to run, while declaration only tells the program what to expect.Final Answer:
To tell the program the function's name, return type, and parameters -> Option BQuick Check:
Function declaration = function signature [OK]
- Confusing declaration with definition
- Thinking declaration runs code
- Mixing variable creation with function declaration
Solution
Step 1: Identify correct syntax for declaration
A function declaration includes the return type, function name, parameter list, and ends with a semicolon without a body.Step 2: Check each option
int add(int a, int b); matches declaration syntax. int add(int a, int b) { return a + b; } is a definition. Options C and D have invalid syntax.Final Answer:
int add(int a, int b); -> Option AQuick Check:
Declaration ends with semicolon, no body [OK]
- Writing function body in declaration
- Missing semicolon at end
- Incorrect parameter syntax
int multiply(int x, int y);
int main() {
int result = multiply(3, 4);
std::cout << result;
return 0;
}
int multiply(int x, int y) {
return x * y;
}
Solution
Step 1: Understand function declaration and definition
The function multiply is declared before main and defined after main, which is allowed in C++.Step 2: Calculate multiply(3, 4)
The function returns 3 * 4 = 12, which is printed by std::cout.Final Answer:
12 -> Option DQuick Check:
3 * 4 = 12 [OK]
- Thinking definition must be before main
- Confusing declaration with definition
- Expecting compile error without definition before main
void greet();
int main() {
greet();
return 0;
}
void greet() {
std::cout << "Hello!" << std::endl
}
Solution
Step 1: Check function declaration and definition
The function greet is declared and defined correctly with void return type and no parameters.Step 2: Identify syntax error in function body
The line with std::cout << "Hello!" << std::endl is missing a semicolon at the end, causing a syntax error.Final Answer:
Missing semicolon after std::endl -> Option CQuick Check:
Statements must end with semicolon [OK]
- Forgetting semicolon after std::endl
- Thinking declaration missing causes error
- Assuming wrong return type
int max(int a, int b); and define it later. Which of these definitions correctly implements it to return the larger number?Solution
Step 1: Understand function purpose
The function max should return the larger of the two integers a and b.Step 2: Evaluate each definition
int max(int a, int b) { if (a > b) return a; else return b; } returns a if a > b, else b, correctly returning the maximum. Options A, B, and C do not correctly return the maximum value.Final Answer:
int max(int a, int b) { if (a > b) return a; else return b; } -> Option AQuick Check:
Return larger value using if-else [OK]
- Returning sum instead of max
- Returning smaller value by mistake
- Returning constant zero
Ready to prove it?
Pass the test and this pattern moves unknown
