Recursive Function Returns and Goes Again C

Overview

Recursion is a routine that calls itself over again and again directly or indirectly. There are two types of recursion in the C linguistic communication Direct calling and Indirect calling. The calling refers to the recursive call. The recursion is possible in C language by using method and function. Using recursion the problems like the Tower of Hanoi, Fibonacci series, the nth derivative can be solved. The recursion uses a stack to store its calls in memory.

Scope of the Article

  • In this article we take covered Recursion and its types.
  • The article is example-oriented with step by step explanation of each case.
  • The article explains the memory allotment of recursion forth with its advantages and disadvantages.

What is Recursion in C?

Recursion, in full general, can be defined every bit the repetition of a procedure in a like style every bit it is till the specific condition reaches. In C Programming if a function calls itself from inside the same function is called recursion. The function which calls itself is called a recursive function and the function telephone call is termed a recursive phone call. The recursion is similar to iteration only information technology is more than complex to understand. If the trouble can be solved by recursion that means, information technology tin be solved by iteration. Problems like sorting, traversal, and searching can be solved using recursion. While using recursion make sure that it has a base (exit) condition, otherwise the program will go in the infinite loop.

The recursion contains ii cases in its program trunk.

Base case: When you write a recursive method or function it keeps calling itself and so, the base case is a specific condition in the function when it is met it terminates the recursion. It is used to brand sure that the plan volition cease otherwise information technology goes into an infinite loop.

Recursive instance: The part of code inside the recursive role which is executed again and again while calling the recursive function is known as the recursive case.

Mathematical Interpretation of Recursion in C - Syntax:

The syntax for recursion is :

            
                                  void                                                      recursive_fun                  ()                                                      //recursive function                                                                        {                                                        Base_case;                                    // Stopping Status                                                                          recursive_fun();                                    //recursive telephone call                                                                        }                                    int                                                      chief                  ()                                                                        {                                                        recursive_fun();                                    //office telephone call                                                                        }                              

The function call inside the chief function is normal call, information technology calls the recursive_fun() part within which at that place is another function call recursive_fun(); which is termed as recursive phone call and the whole recursive_fun() part is recursive part. Base_case is the stopping condition for the recursive office.

Flowchart of Recursion

Here, there is a recursive function inside which there is a recursive call that calls the recursive function until the condition of the problem is true. If the status gets satisfied and then the condition is false and the programme control goes for the remaining statements and stops the program.

Flowchart of Recursion

How does Recursion work?

The recursion is possible using a method or function in C language. The recursive part or method has two chief parts in its body i.eastward base case and the recursive case. While the recursive method is executed, starting time the base case is checked by the plan if information technology turns out true the role returns dorsum and quits otherwise the recursive case is executed. Inside the recursive case, nosotros have a recursive call that calls part inside which it is present.

The representation of recursion in the program is as follows.

            
                                  recursive_function()                  {                                                      //base instance                                                                                          if                                      base_case =                                    true                  ;                                                                        return                  ;                                                                        else                                                                                          //recursive case                                                                                          render                                      code_for_recursion;                                    //includes recursive call                                    }                              

Types of Recursion in C

In that location are two types of recursion in the C language.

  1. Directly Recursion
  2. Indirect Recursion

ane. Direct Recursion

Direct recursion in C occurs when a role calls itself directly from within it. Such functions are also chosen direct recursive functions.

Post-obit is the structure of direct recursion.

            
                                  function_01()                  {                                                      //some code                                                      function_01();                                                      //some code                                    }                              

In the directly recursion structure, the function_01() executes, and from inside it calls itself recursively.

C Program Function to show direct recursion.

Hither is a simple C program to print the Fibonacci series using direct recursion.

Code:

            
                                  #                  include                  <stdio.h>                                                                                                            int                                                      fibonacci_01                                                      (                  int                                      i)                                                                        {                                                      if                                      ( i ==                                    0                  )                  {                                    render                                                      0                  ;                  }                                    if                                      ( i ==                                    i                  )                  {                                    return                                                      1                  ;                  }                                    return                                      fibonacci_01 (i -                                    1                  ) + fibonacci_01 (i                                    -2                  );                  }                                                                            int                                                      main                                                      ()                                                                        {                                                      int                                      i,n;                                                      printf                  (                  "Enter a digit for fibonacci series: "                  );                                                      scanf                  (                  "%d"                  ,&n);                                                      for                                      ( i =                                    0                  ; i < northward; i++)                  {                                    printf                                      (                  " %d \t "                  , fibonacci_01 (i));                  }                                    return                                                      0                  ;                  }                              

Output:

            
                                  Enter a digit                                    for                                      fibonacci series:                                    eight                                                                                          0                                                      1                                                      one                                                      2                                                      3                                                      5                                                      eight                                                      13                                                                  

In the C programme in a higher place we take declared a part named fibonacci_01(). It takes an integer i as input and returns the ith chemical element of fibonacci series. At present at first, the main() function will exist executed where we take taken two variables i and n. We will accept input from the user that volition exist stored in n and the for loop will execute till northward iteration where with each iteration it will pass the parameter to fibonacci_01() function where the logic for Fibonacci serial is written. Now within fibonacci_01() function we take nested if-else. If input = 0 it will return 0 and if the input = 1 it will return ane, these are the base cases for the fibonacci function. If the value of i is greater than 1 then fibonacci(i) volition render fibonacci_01 (i - 1) + fibonacci_01 (i -2) recursively and this recursion volition exist computed till the base condition.

2. Indirect Recursion

Indirect recursion in C occurs when a function calls some other part and if this function calls the showtime function again. Such functions are likewise called indirect recursive functions.

Post-obit is the structure of indirect recursion.

            
                                  function_01()                  {                                                      //some lawmaking                                                      function_02();                   }                                      function_02()                   {                                                      //some code                                                      function_01();                   }                              

In the indirect recursion structure the function_01() executes and calls function_02(). After calling now function_02 executes where within information technology there is a call for function_01 which is first calling function.

C Program Function to show indirect recursion.

Here is a C program to print numbers from 1 to ten in such a manner that when odd no is encountered nosotros would print that number plus i, when even number is encountered we would impress that number minus 1 and will increment the current number at every stride.

Code:

            
                                  #                  include                  <stdio.h>                                                                                                            void                                                      odd                  ()                  ;                                                      void                                                      even                  ()                  ;                                                      int                                      due north=                  1                  ;                                                      void                                                      odd                  ()                                                                        {                                                                        if                  (n<=                  10                  )                                    {                                                      printf                  (                  "%d "                  ,north+                  ane                  );                                    n++;                           even();                       }                                                      return                  ;                  }                                                       void                                                      even                  ()                                                                        {                                                                        if                  (n<=                  10                  )                                    {                                                      printf                  (                  "%d "                  ,n                  -1                  );                                    n++;                           odd();                       }                                                      return                  ;                  }                                                       int                                                      main                  ()                                                                        {                                    odd();                   }                              

Output:

          

In this C program nosotros have function named odd() and even(). A variable n is assigned with value 1 as we take to take values from 1 to 10. Now inside the odd() office, we have an if statement which states that if the value of due north is less than or equals 10 add ane to it and print. And then the value of n is incremented by ane(it becomes even) and the even() function is chosen. Now inside the fifty-fifty() role, we again have an if statement which states that if the value of north is less than or equals 10 subtract one from information technology and print. Then the value of n is incremented by 1(it becomes odd and the odd() role is called. This indirect recursion goes on until the if condition inside both the functions becomes unsatisfied. At last, we take the main() office inside which nosotros call the odd() part every bit the first number handle is ane which is odd.

Now allow's simulate this program by using stack and the concept called activation record by which we could track program logic in respect of program stack.

In the following images:

  • Human action ways "Activation Record"
  • o means odd()
  • east ways fifty-fifty()
  • m means main()

Activation Record to track program logic in respect of program stack

Activation Record to track program logic in respect of program stack

Removing Activation Record from the program stack

Here, the activation tape is denoted by Human action, odd() is represented by o, even() by e, and main() is represented by 1000. Upon executing the program at first, the main() function is executed, which causes the activation record Act m to be stored in the stack. The main part calls the odd() function, and then the activation record Deed o is next added to the stack. Now inside odd() at that place is a call for even() so the activation record Act e is added in the stack and this procedure goes on until the base weather condition inside the odd() and even() role are reached. Now that the base of operations conditions are met, the activation records are removed from the stack and the value inside that activation record is returned merely in above instance functions are void they don't returned any value.

Let's have a few more examples of recursion to empathise it in a better manner.

C Program to testify infinite recursive function.

Code:

            
                                  #                  include                  <stdio.h>                                                                        int                                                      main                  ()                                                                        {                                                                        printf                  (                  "Scaler"                  );                                    main();                                                      return                                                      0                  ;                  }                              

In this program, there is a call for main() role from inside main() function. But we accept not given go out condition for the program. Therefore, the program volition print 'Scaler' infinite times as output.

Hence, this is what happens when you lot run a program without a base of operations case.

C plan to calculate factorial of a number using recursion.

Code:

            
                                  #                  include                  <stdio.h>                                                                        int                                                      factorial_01                  (                  int                                      n)                                                                        {                                                                        if                  (n==                  0                  )                                                                        render                                                      1                  ;                                                                        else                                                                                          return                                      (factorial_01(n                  -1                  )*north);                  }                                                       int                                                      main                  ()                                                                        {                                                                        int                                      a,fact;                                                                        printf                  (                  "Enter a number to calculate factorial: "                  );                                                                        scanf                  (                  "%d"                  ,&a);                                                          fact=factorial_01(a);                                                                         printf                  (                  "Factorial of %d = %d"                  ,a,fact);                                                                        render                                                      0                  ;                  }                              

Output:

            
                                  Enter a number to summate factorial:                                    4                                                      Factorial of                                    4                                      =                                    24                                                                  

In the higher up C program, nosotros are calculating the factorial using recursion. Here we are declaring variable n inside which the number is stored whose factorial is to exist plant. The part factorial_01 calculates the factorial of that number. In the factorial_01 function if the value of n=0 and then it returns 1 which is the base condition of the role else factorial(n-1) is recursively computed first so multiplied to due north. The factorial value is stored inside the fact which nosotros print in the terminate.

Sum of Natural Numbers Using Recursion

Code:

            
                                  #                  include                                                      <stdio.h>                                                                        int                                                      sum                  (                  int                                      a)                  ;                                                      int                                                      main                  ()                                                      {                                                                        int                                      num,x;                                                                        printf                  (                  "Enter a number: "                  );                                                                        scanf                  (                  "%d"                  , &num);                                                          x = sum(num);                                                                         printf                  (                  "sum of natural number = %d"                  , x);                                                                        render                                                      0                  ;                  }                                                       int                                                      sum                  (                  int                                      a)                                                      {                                                                        if                                      (a !=                                    0                  )                                                                        render                                      a + sum(a                  -1                  );                                    //sum() calls itself                                                                                          else                                                                                          return                                      a;                  }                              

Output:

            
                                  Enter a number:                                    viii                                                      sum of natural number =                                    36                                                                  

Caption: In the to a higher place program, the sum() part is invoked from the chief() role in which the integer value is passed as an argument. In sum() function we pass an integer variable 'a' and if it is not null and then it returns an expression with a recursive call to the sum(a-1) function and it continues until the value of a is equal to 0. When a is zero, then the condition if sum() fails and returns the value of 'a'.

For case, if we starting time with sum(3). Every bit a=three is not equal to 0 then the sum(3) function will render 3+sum(two) by calling sum(2) recursively, as a=two non equal to 0 sum(2) volition return ii+sum(1) past calling sum(1) recursively, every bit a=1 non equal to 0 sum(1) will render 1+sum(0) and equally a==0 became true sum(0) will return 0. Equally sum(1)=i+sum(0) it volition became 1, sum(two)=2+sum(1) it volition became 3, sum(3)=3+sum(2) it will became vi. As a result sum(three) return vi equally a upshot of sum of first 3 natural numbers.

Recursive Role.

Recursive Function in C

The recursive function is a function that repeats its execution by calling itself again and again direct or indirectly until its base case is reached. The recursive function contains a recursive call which is present inside that function and calls that function. Subsequently each recursive call, the copy of that function with all the variables with the value passed in it is stored in retentiveness and after the function reached the base of operations case the recursive calls are stopped and the copies in the memory start to render all their values. Later on all the values are returned the recursive function is terminated.

In the above figure the recursive_fun() is recursive office recursive_fun(); inside recursive_fun() is a recursive phone call.

Retentivity Allocation Of Recursive Method.

Since recursion is a repetition of a particular process and has so much complication so the stack is maintained in retention to store the occurrence of each recursive call. When recursion occurs each recursive call creates an activation tape(copy of that method) in the stack inside memory and once something is returned or base case is reached that activation record is de-allocated from the stack and that stack gets destroyed.

Each recursive phone call whose re-create is stored in stack stored different copy of local variables declared inside that recursive office.

Permit'southward consider a C program to demonstrate the memory allotment of the recursive method.

Lawmaking:

            
                                  #                  include                                                      <stdio.h>                                                                        int                                                      rfunc                                                      (                  int                                      a)                                                      //2) recursive function                                                                        {                                                                        if                  (a ==                                    0                  )                                                                        return                                                      0                  ;                                                                        else                                                      {                                                      printf                  (                  "%d "                  ,a);                                                                        render                                      rfunc(a                  -ane                  );                                    // 3) recursive call is fabricated                                                      }                     }                                    void                                                      main                  ()                                                                        {                                                        rfunc(                  v                  );                                    // 1) office call from main                                                                        }                              

Output:

          

Caption: In this C program rfunc() is a recursive function. When entered a digit the role subtracts 1 with each recursive call from that digit and prints it until information technology encounters 0 and if it encounters 0 it terminates the function immediately.

Memory Resource allotment:

Memory Allocation

The commencement call to the role rfunc() having value a=5 volition lie every bit a copy on the bottom of the stack and it is also the copy that will return at the finish. Meanwhile, the rfunc() will call another occurrence of the same function but with 1 subtracted i.e a=4. Now each fourth dimension a new occurrence is called it is stored at the elevation of the stack and this goes on until the status is satisfied. As the condition is unsatisfied i.due east a=0 at that place will be no farther calls and each function copy stored in the stack will get-go to return their respected values and the office will now stop. Therefore, in this way, the retention allocation of recursive function occurs.

Advantages and Disadvantages of Recursion.

Advantages:

  1. The lawmaking becomes shorter and reduces the unnecessary calling to functions.
  2. Useful to solve formula-based problems and circuitous algorithms.
  3. Useful in Graph and Tree traversal every bit they are inherently recursive.
  4. Recursion helps to divide the problem into sub-problems and then solve them, essentially divide and conquer.

Disadvantages:

  1. The code becomes hard to understand and analyze.
  2. A lot of memory is used to hold the copies of recursive functions in the retentivity.
  3. Time and Space complication is increased.
  4. Recursion is generally slower than iteration.

Decision

  • There are two types of recursion in C language, first is Direct recursion and Indirect recursion.
  • The Direct recursion in C occurs when a function calls itself directly from inside information technology.
  • Indirect recursion occurs when a function calls another function and then that role calls the first function again.
  • The function call to itself is called a recursive call and the role volition become recursive function.
  • The stack is maintained in the memory to store the recursive calls forth with all the variables with the value passed in them.

andersonkillaughted.blogspot.com

Source: https://www.scaler.com/topics/c/recursion-in-c/

0 Response to "Recursive Function Returns and Goes Again C"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel