notes tops top - return ( data[ ])void push(struct stack *sdouble eif( top =maxcprintf("stack full!")else top top data[ topeint empty(struct stack *pif( top =- return else return simulating recursive function using stack recursive solution to problem is often more expensive than non-recursive solutionboth in terms of time and space frequentlythis expense is small price to pay for the logical simplicity and self-documentation of the recursive solution howeverin production program (such as compilerfor examplethat may be run thousands of timesthe recurrent expense is heavy burden on the system' limited resources thusa program may be designed to incorporate recursive solution in order to reduce the expense of design and certificationand then carefully converted to non-recursive version to be put into actual day-to-day use as we shall seein performing such as conversion it is often possible to identify parts of the implementation of recursion that are superfluous in particular application and thereby significantly reduce the amount of work that the program must perform suppose that we have the statement rout ( )where route is defined as function by the header rout( ) is referred to as an argument (of the calling function)and is referred to as parameter (of the called functionwhat happens when function is calledthe action of calling function may be divided into three parts passing arguments allocating and initializing local variables transferring control to the function lovely professional university