Recurrence relations and recursion
In general, recursive functions continually call themselves until a base case is met. Once a base case is met, then the current function eventually returns, and all prior functions return.
The base case for fun1()
is n = 0:
void fun1(int n)
{
if(n > 0)
{
printf("%d ", n);
fun1(n - 1);
}
}
One if
statement and one printf()
call, when n > 0
. In addition there are T(n - 1)
multiple calls of fun1()
made when n > 0
. When n = 0
, only one run of the if
statement is needed.
One can express a recurrence relation (an equation which relates consecutive terms, in this case, of a recursive function calls) to deduce the number of calls (time complexity T(n)
for int n
) expected.
T(n) = 1 n = 0
T(n - 1) + 2 n > 0
For all n > 0
, if
T(n) = T(n - 1) + 2
then it follows that
T(n - 1) = T(n - 2) + 2
T(n - 2) = T(n - 3) + 2
...
Thus,
T(n) = [T(n - 2) + 2] + 2
= T(n - 2) + 2
We generalise for constant k
such that
T(n) = T(n - k) + k
When n - k = 0
, this means T(n) = T(0) + n = 1 + n
. That is, T(n) = 1 + n
is effectively scaled to T(n) = n
, a degree (or order) of one.