My problem:
The solution of my problem is:
We need to find an (recursive) algorithm that solves My Problem.
Consider the smaller problem insert(head->next, e):
The solution of insert(head->next, e) is:
Suppose we have the solution of insert(head->next, e) avialable:
How can we use this solution to solve our original problem ?
Answer:
So: what is the (recursive) algorithm ?
The recursive algorithm:
helpSol
=
insert( h->next, e ) ; --- ask
someone else to
solve this
smaller problem
The recursive algorithm:
helpSol
=
insert( h->next, e ) ; --- ask
someone else to
solve this
smaller problem
head->next
=
helpSol ; ---
use the
smaller solution to
solve
my problem !
Base case: (insert in an empty list)
Solution:
Algorithm:
e->next =
NULL;
return e;
struct List *insert( struct List *head, struct List *e ) { struct List *helpSol; /* -------------------------------------------- Base case: insert at the tail of an empty -------------------------------------------- */ if ( head == null ) { e->next = null; // Mark e as the last list elem return(e); // e is the first list elem ! } else { /* =========================================================== Solve the problem USING the solution of a smaller problem =========================================================== */ helpSol = insert( head->next, e ); // Have "someone else" solve // this smaller problem head->next = helpSol; // Find MY solution using helpSol return head; // Return MY solution } } |
DEMO: /home/cs255001/demo/C/Recursion/insert-tail.c
struct List *insert( struct List *head, struct List *e ) { /* -------------------------------------------- Base case: insert at the tail of an empty -------------------------------------------- */ if ( head == null ) { e->next = null; // Mark e as the last list elem return(e); // e is the first list elem ! } else { /* =========================================================== Solve the problem USING the solution of a smaller problem =========================================================== */ head->next = insert( head->next, e ); // Link directly to helpSol return head; // Return MY solution } } |