Recursion in c


Published on

Recursion, a programming concept with implentation view of "Tower of Hanoi"

Published in: Education
1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Recursion in c

  1. 1. Fundamentals Of Programming in C Presented By: saket kr Pathak nt & M aMIty InstItute Of InfOrMatIOn technOlOgy 1
  2. 2. RecursionRecursion is said as a mathematical concept which states that anexpression such that each term is generated by repeating a particularmathematical operation. Here repeating is the iterative manner toperform same operation.As the approach of the programming language C, it can be performedand are in practice within the definition part of functions. Syntacticallylanguage provides the freedom to call function within it’s bodydefined.Definition of ‘Recursion’ as the logical prospective view states simplythe iterative manner to perform any code snippet in C, but we alwaysneed a terminating condition to control the going on iterations. In thefollowing sections we will discuss the iterative manner of recursionand the terminating condition in bit expanded form. Fundamentals Of Programming in C 2
  3. 3. Recursive FunctionsRecursive functions are not different from the syntactical structure ofthe general functions that we had discussed in previous sections.They have same return type, function name, parameters enclosedwithin parenthesis.Declaration: int Think_and_ Play (int, char);We had discussed the syntactical view of the function, where returntype is ‘int’, function name is ‘Think_and_Play’ and within theparenthesis we had defined the parameters as of data type integerwith another one that is of data type character. Amity Institute Of Information Technology 3
  4. 4. Now let us manipulate the definition of the our function, that we haddeclared in the previous slide from the general aspect of definitionwe had practiced till now.Definition: int _iFlag =0, _iTerminate = 0; int Think_and_Play(int _iBat, char _chBall) { if (_iFlag ==0) printf(“This is game cricket going on.”); _iFlag++; if(_iTerminate < 6) { printf(“Hit the Ball with the Bat.”); ++ _iTerminate; Think_and_Play(1, ‘0’); return 1; } } Amity Institute Of Information Technology 4
  5. 5. As in sequence of explanation, this snippet code has few syntacticalstatements. In the very first the program counter encounters with theVariables of type integer that are global to the function.Then it encounters the return type of the function following with thefunction name, and the parameters defined. All of these has theconsiderable part in function definition structure of C language thatwe had discussed in the previous sections of declaration.As encounter with the right curly braces comes into just nextstatement, it considers the following structure is for definition.In the definition part, the first if condition is doing its formalresponsibility to control the execution of print function where thedefined condition will be true i.e. when the value of the variable‘_iFlag’ is strictly equal to 0. Amity Institute Of Information Technology 5
  6. 6. The next statement is simply incrementing the value stored in thememory location termed as ‘_iFlag’ (the variable name).Then our point of consideration comes into picture in the executionof second ‘if’ structure. Here in this ‘if’ structure program counterwill execute the statements defined within ‘if’ body, if and only ifthe condition gets true. It means whenever the condition definedwith the if statements returns ‘Boolean True’ value then the furtherbody will execute. So we can consider the controlling system of theexecution of ‘if-body’ is properly controlled through the conditiondefined there in if statement.Now within the body concerned, we have a print function thatsupports its definition with two arguments defined as ‘String type’and another is ‘Variable Length Argument’ (i.e. null in the snippet).Function performs the role successfully and control passes further. Amity Institute Of Information Technology 6
  7. 7. The followed statement says to increment the value stored in thememory location corresponds to the variable name ‘_iTerminate’.Here logically this increasing value of ‘_iTerminate’ and the ifcondition defined above will cause the terminating condition.At the near end of the body, we have a function call as‘Think_and_Play(…, …)’. Since here we are calling the samefunction that is executing, is said as recursion. Therefore, calling ofthe function from its own body forms a loop like execution patternand is said as recursion. It is also considered as the alternativeprogramming pattern of looping structure (i.e. of ‘for loop’ and‘while loop’).The end statement says to return the value to the calling function as‘return 1’, that declares the successful completion of all otherstatements defined above. Amity Institute Of Information Technology 7
  8. 8. DiscussionTypically, recursion is quite elegant and requires fewer variables tomake the same calculation as iterative looping structural programs.It take care of its assigned records by maintaining the stack ofarguments and variables for each invocation. It has been calculatedin some machines a simple recursive program call with snippetdefining one integer argument can be requires 8 32-bit words on thestack.Let us consider a snippet code of fibonacci sequence and calculateit’s efficiency in the following section. Amity Institute Of Information Technology 8
  9. 9. Snippet-Code: int fibonacci (int _iNam) { if (_iNam <= 1) return _iNam; else return (fibonacci(_iNam-1)+fibonacci(_iNam-2)) }Through ‘main()’ call the ‘fibonacci()’ with the index value to next generaterecursive value. Amity Institute Of Information Technology 9
  10. 10. Dissection of ‘fibonacci’ Program: int fibonacci (int _iNam) Here in the above statement the function name ‘fibonacci’has the parameter type defined as ‘integer’ having the return type as‘integrer’. The right braces comes as the starting point of the snippetcode. if (_iNam <= 1) return _iNam; Here in the above two statements the condition followed by ‘if’, is establised as the terminating point if condition gets it satisfied. On the satisfactory mode of ‘if’ statement the value stored in _iNam return back to the calling. Amity Institute Of Information Technology 10
  11. 11.  else return (fibonacci(_iNam -1) + fibonacci(_iNam - 2)); In the else part of the consecutive ‘if’ statement the return value is a bit complex. At first the recursion takes place for the first part from left and returns 1 decremented value i.e. ‘-1’ to the previous value, simultaneously it maintains a stack of all the new variables and concern values for each invocation. That will be come in use for the next recursive call. The next recursive call initializes the variable with the decremented value as ‘-2’. At the end when function call completes then the respective sum of the value returns back to the calling statement in ‘main()’. The left braces shows the termination of the code snippet. Amity Institute Of Information Technology 11
  12. 12. As in the following we have the table showing 10 number offunction calls in simultaneous recursion. Value of _iNam Return Value of Number of Function calls in recursive fibonacci(_iNam) computation. 0 0 1 1 1 1 2 1 3 3 2 5 4 3 9 5 5 15 6 8 25 7 13 41 8 21 67 Amity Institute Of Information Technology 12
  13. 13. As in the above table describes, the value passed through theparameter, the value that the function returns and the number ofrecursive steps a function can perform up to 9 sequential calls.Cons: Recursive programs typically use a large amount of computer memory and the greater the recursion, the more memory used. Recursive programs can be confusing to develop and extremely complicated to debug.Pros: Recursion is a natural fit for some types of problems as ‘Tower of Hanoi’. Amity Institute Of Information Technology 13
  14. 14. Practice ‘Towers of Hanoi’Problem:The Classical Towers of Hanoi - an initial position of all disks is onpost A‘. Amity Institute Of Information Technology 14
  15. 15. The target solution of the puzzle is to build the tower on post C.The number of discs can vary, but there are only three towers.The goal is to transfer the discs from one tower another tower.However you can move only one disk at a time and you can neverplace a bigger disc over a smaller disk. Amity Institute Of Information Technology 15
  16. 16. Algorithm to solve the above problem:Move the top 3 disks from Source to Auxiliary tower,Move the 4th disk from Source to Destination tower,Move the 3 disks from Auxiliary tower to Destination tower.Transfer the top 3 disks from Source to Auxiliary tower can againbe thought as a fresh problem and can be solve in the same manner. Amity Institute Of Information Technology 16
  17. 17. Let us do it step by step: At first move the ‘Disc1’ to ‘B’ and ‘Disc2’ to ‘C’ as infollowing figure: Amity Institute Of Information Technology 17
  18. 18. Move the ‘Disc1’ to the top of the ‘Disc2’ at ‘C’ and ‘Disc3’ at‘B’. Move the ‘Disc1’ to ‘A’ at the top of ‘Disc4’ and ‘Disc2’ at ‘B’ to the topof ‘Disc3’. Amity Institute Of Information Technology 18
  19. 19.  Move the ‘Disc1’ at ‘B’ to the top of ‘Disc2’ and ‘Disc4’ at ‘A’. Move the ‘Disc1’ at ‘C’ to the top of ‘Disc4’ and ‘Disc2’ at ‘A’. Amity Institute Of Information Technology 19
  20. 20.  Move the ‘Disc1’ at ‘A’ to the top of ‘Disc2’ and ‘Disc3’ to the top of‘disc4’ at ‘A’.  Move the ‘Disc1’ at ‘B’ and ‘Disc2’ at ‘B’ to the top of ‘Disc3’. Amity Institute Of Information Technology 20
  21. 21.  Move the ‘Disc1’ at the top of ‘Disc2’ at ‘C’. Congratulations you got your answer. Code implementation is up to you people as hint use the concept of stack and just follow the steps Above described. Amity Institute Of Information Technology 21
  22. 22. /***********************************************************///Here in the following Program, towers are considered as character A, B//and C and disks are considered as integral numbers./***********************************************************/#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <string.h>#include <math.h> Amity Institute Of Information Technology 22
  23. 23. void generate_moves_toh(int i_disk_num, char from_peg,char to_peg, char aux_peg){/* If only 1 disk, make the move and return */ if(i_disk_num == 1) { printf("nMove disk 1 from peg %c to peg%c", from_peg, to_peg); return; } Amity Institute Of Information Technology 23
  24. 24. /*Move top n-1 disks from A to B, using C as auxiliary*/ generate_moves_toh(i_disk_num-1, from_peg,aux_peg, to_peg); printf("nMove disk %d from peg %c to peg %c",i_disk_num, from_peg, to_peg);/* Move n-1 disks from B to C using A as auxiliary */ generate_moves_toh(i_disk_num-1, aux_peg, to_peg,from_peg);} Amity Institute Of Information Technology 24
  25. 25. void gen_tow_of_honoi(){ printf("WAP to display the steps required insolving Tower of Hanoi for n number of disks."); printf("nLimitation: nt-> Disks arerepresented as integral numbers in assending order."); printf("nnn"); int i_num_disk; printf("Enter the number of disks : "); scanf("%d",&i_num_disk); printf("The Tower of Hanoi involves the moves:nn"); generate_moves_toh(i_num_disk, A, C, B);} Amity Institute Of Information Technology 25
  26. 26. int main(){ gen_tow_of_honoi(); printf("nnn"); getch(); return 0;} Amity Institute Of Information Technology 26
  27. 27. •The C Programming Language (by Dennis M. Ritchie and Brain W.Kernighan).•A book on C (by Al Kelley and Ira Pohl).•Let us C (by Yashavant Kanetkar). Amity Institute Of Information Technology 27