printlistnode next nodeprintlistnode next nodeprintlistnode next nodeprintlistnode next nodeprintlistnode next nodeprintlisthead nodeheadmain() run time stack figure the run time stack for the printlist(function when the base case is reached while processing the linked list from figure as the recursion progresses and more activation records are pushed onto the run time stackthe corresponding node argument is assigned to point to the next node in the list when the base case is reachedthe node argument of each of the preceding function calls will point to different node in the list thusas the recursion unwindsthe contents of each node can be printedresulting in listing of the values in reverse order both the printliststack(and printlist(functions provide an implementation to the problem of printing linked list in reverse order the former requires the use of an explicit loop for iterating through the list and stack to store the data for later printing in the recursive version the loop and stack are implicit the loop is replaced by the recursive calls while the user-specified stack is replaced by the run time stack on which activation records are pushed for each call to the function tail recursion sometimes an algorithm is easy to visualize as recursive operationbut when implemented as recursive functionthe solution proves to be inefficient in these casesit can be beneficial to use non-recursive implementation that makes use of basic iterative loop or the software stack adt from the main reason for using recursion is to push values onto the run time stack that need to be saved until the recursive operation used to solve the smaller sub