C Tutorial

C Tutorial C Language Environment Setup Execution flow of C program C printf and Scanf C Data type C Token Variable in C Operators in C Comments in C Escape Sequence in C C – Storage Classes C Decision control statement Loop Statement in C Break, continue and goto statement in C Type Casting in C Function in C Recursion in C String in C C Array Pointer in C Dynamic memory allocation C –Structure Nested Structure in C Union in C File Handling in C C pre-processor Static Function In C Sizeof In C Selection Sort In C Scope Of Variables In C Runtime Vs Compile Time In C Random Access Lseek In C Queue Implementation In C Pseudo Code In C Prototype In C Pointer To Pointer In C Pointer Arithmetic In C Passing Array To Function In C Null Character In C Merge Sort In C Macros In C Library Functions In C Memory Leak In C Int In C Goto And Labels In C Fibonacci Series In C Fflush In C Derived Data Types In C Data Types In C Const Vs Volatile In C Character Set In C Character Class Tests In C Calloc In C C Pointers Arrays In C Include In C Clrscr In C C Vs Java String Literals In C Types Of Pointers In C Variables In C Volatile In C Why C Is A Middle Level Language Infix To Postfix Program In C Ceil function in C LCM of two numbers in C Quick sort in C Static in C function pointer as argument in C Top Array Keywords in C Add two numbers using the function in C Armstrong program in C using function Array, Declaring Arrays and Array Initialization Limitations of Inline Function in C Merge and Merge sort with example in C Do-While Loop in C For Loop in C While-Loop in C Difference between while and do-while loop in C Array Of Structures in C Data Structures And Algorithms in C Types Of Structures In C How to Avoid Structure Padding in C Use of Structure in C Do WHILE LOOP in C Programming Examples For Loop in C Programming Examples Entry Control Loop in C Exit control loop in C Infinite loop in C Nested loop in C pow() function in C String Handling functions in C Prime Number code in C Factorial Program in C using For Loop Factorial Program in C Using While Loop Fibonacci Series in C Using For Loop Fibonacci series in C using while loop Prime Number Program in C using for Loop While Loop in C programming examples Built-in functions in C Assert() Function C vs Java Strings Call Back Function in Embedded C Else If Ladder fgets() function Ftell() Function getc() function getch() function gets() function Heap Sort Nested if-else statement Pi() Function Positioning of file Write() function abs() function in C Attributes in C C program to find factorial of a number using Recursion Ferror() in c fopen() function in C Fibonacci series program in C using Recursion Formatted Input and output function in C Snake Game in C User Defined Functions in C Beep() function in C Cbrt() function in C Hook() function in C Isalnum() function in C C Program to find the Roots of a Quadratic Equation C Switch Statements Difference between rand() and srand() function in C Difference between while and for loop in C Doubly Linked list in C Example of Iteration in C How to use atoi() function in C How to use floor() function in C How to use sine() function in C How to use Typedef Struct in C Integer Promotions in C C Program Swap Numbers in cyclic order Using Call by Reference C Program to Find Largest Number Using Dynamic Memory Allocation C Program to Find the Largest Number using Ternary Operator C/C++ Program to Find the Size of int, float, double and char Find the Largest Three Distinct Elements in an Array using C/C++ Loop Questions in C Modulus on Negative Numbers in C Multiplication table program in C using For loop Nested Loops in C Programming Examples C Program for Mean and Median of an Unsorted Array Results of Comparison Operations in C and C++ Reverse a Stack using Recursion in C Simple hash() function in C strcat() Function in C Sum of N numbers in C using For loop Use of free() function in C Write a program that produces different results in C and C++ C Function Argument and Return Values Keywords in C Bank management system in C Calendar application in C Floor() Function in C Free() Function in C How to delete a file in C How to move a text in C Remove an element from an array in C Unformatted input() and output() function in C What are linker and loader in C SJF Scheduling Program in C Socket Programming in C Structure in C Tower of Hanoi in C Union Program in C Variable Declaration in C What is Linked List in C While Loop Syntax in C fork() in C GCD program in C Branching Statements in C Comma Operator in C Control statement in C Double Specifier in C How to create a binary file in C Long int in C Palindrome Number in C Pure Virtual Function in C Run Time Polymorphism in C Types of Array in C Types of Function in C What is a buffer in C What is required in each C Program Associativity of Operators in C Bit Stuffing Program in C Actual and Formal Parameters Addition of two Numbers in C Advantages of function in C Arithmetic Progression Program in C Binomial Coefficient Program in C Difference between Array and List in C Diffie-Hellman Algorithm in C How to convert a number to words in C How to convert a string to hexadecimal in C Difference between If and Switch Statement in C C and C++ Binary Files C program that does not Suspend when Ctrl+Z is Pressed Different ways to Declare the Variable as Constant in C Range of Int in C C Program to find the size of a File FIFO Example in the C Language For loop in C Programming GCD program of two numbers in C GPA Calculator in C How to Calculate Time Complexity in C How to include graphics.h in C How to measure time taken by a function in C How to return a Pointer from a Function in C What is the main in C Addition of Matrix in C Booleans in C C Program for Extended Euclidean algorithms C Program of Fencing the Ground Ceil and Floor in C Compound Interest Program in C Displaying Array in C Distance Vector Routing Protocol Program in c Dos.h Header File in C Language DSA Program in C Explain the two-way selection in C Fee Management System in C File Operations in C Malloc function in C Multiplication Table in C Simple Programs in C Language tolower() Function in C Type Conversion in the C Why does sizeof(x++) not Increment x in C Advantages of Dynamic Memory Allocation in C Armstrong Number in C Assignment Operator Program in C Banker’s Algorithm in C Binary Search in C with Best and Worst Time Complexity Caesar Cipher Program in C Call by Value and Call by Reference in C Conditional Operator in C CRC Program in C Deadlock Detection Program in C Decimal to Binary in C Difference between If Else and Nested If Else in C Difference between Pre-increment and Post-increment in C Difference between Scope and Lifetime in C Evaluation of Arithmetic Expression in C Explain the Increment and Decrement Operators in C Fseek Function in C Functions in C How to Find Square Free Numbers in C Length of an Array Function in C OpenGL in C Projects on C language in 2023 Purpose of a Function Prototype in C Stdio.h in C Two-Dimensional array in C What is String Comparison in C C Compilers for Windows Functions and Recursion in C How to Declare Boolean in C How to Declare Character in C How to Round up a number in C How to use strlen() in C Pointer Declaration in C Algorithm for String Palindrome in C C Program to find ASCII value of a character Constant Pointer in C How to find string length in C using strlen() function Implicit and Explicit in C Indirect Recursion in C Input and Output functions in C isupper() in C Jump Statement in C Lifetime of a Variable in C Linker Error in C Language Numeric Constant in C Size of Pointer in C Square Root in C Language Static and Dynamic Memory allocation String Declaration in C Strong Number in C Symmetric Matrix in C Types of C Tokens What is a Size of Pointer in C What is Increment and Decrement Operator in C 1 2 3 4 Series Program in C Advantages and Disadvantages of C Language C Program for Polynomial Addition C Program to Count the Number of Vowels in a String C Programming Errors and Solutions Compilation Errors in C Complex C Programs Difference between Argument and Parameter in C Difference between char s[] and char *s in C Evaluation of Postfix Expression Using Stack in C Find Leftmost and Rightmost Set Bit of a Number fprintf and fscanf in C Introduction to Dynamic Array in C Print Address in C Realloc function in C Ternary Operators in C Types of Tokens in C with Examples Difference between Static and Dynamic Memory Allocation in C Addition Program in C Array Definition in C Array of Pointers in C Arrow Operator in C Average of Two Numbers in C Binary to Decimal in C Binary to Octal in C BREAK STATEMENT in C C Programming Operators Questions C Programs Asked in Interview Calculator Program in C C Program to Read and Print an Employee's Detail Using Structure Bubble Sort Algorithm in C C Program to Find Area and Perimeter of Circle C Program to Check Whether a Given Number is Even or Odd C in Roman Numerals C Program to Make a Simple Calculator Using Switch Case Insertion Sort Program in C How to take input in string in C GCC Conflicting Types in C Function Definition in C Format Specifier for Hexadecimal in C Flowchart in C Float in C Fizzbuzz Implementation in C Conditional Statement in C Conio.h functions list in C Constants in C Dynamic Array in C Decision Making Statements in C Continue Statement in C Creation of Thread in C DFS Algorithm in C Difference between parameter and arguments in C Dijkstra's Algorithm in C Leap Year Program in C Jump Statements in C Modulus Operator in C Memory Allocation in C Simple Interest Program in C Reverse Array in C Recursive Function in C Queue in C Printing Pascal’s Triangle in C Preprocessor Directives in C Perror() in C Perfect Number in C Programming Language Parameter Passing Techniques in C Pascal Triangle in C Patterm Program in C

Functions and Recursion in C

Functions in C Programming

C programming language provides a feature called functions, which allows grouping a set of statements that perform a specific task. A function is a piece of code that may be used repeatedly and is accessible from any point in a program. By using functions, the program can be organized and broken down into smaller and manageable blocks of code, making it easier to understand, maintain and debug.

Functions in C are similar to procedures in other programming languages. They are a way to encapsulate a set of operations that are used repeatedly throughout a program. Functions can simplify the overall structure of the program, make it more readable, and increase its reusability.

Defining a Function in C

In C, a function is defined using the following syntax:

return_typefunction_name(parameter1, parameter2, ...) {
   // function body
   // statements
return value;
}

Where,

  • return_type is the type of value that the function returns. The return type is given as void if the function returns nothing. The function_name is a valid C identifier that specifies the name of the function.
  • parameter1, parameter2, ... are the parameters that are passed to the function. They can be of different data types. A function's argument list is empty if it doesn't need any input. The function body is enclosed between the curly braces {} and contains the statements that are executed when the function is called.

Calling a Function in C

When calling a function, the name of the function is used and the parameters are enclosed in parenthesis.

For example:

function_name(arg1, arg2, ...);

Where,

  • arg1, arg2, ... are the values that are passed to the function as parameters. The amount and data type of the arguments must match those of the parameters specified in the function in both quantity and type.

Returning a value from a Function in C

In C, a function can use the return statement to pass a value back to the function that called it. The return statement can optionally specify a value to be returned to the calling function.

For example:

return value;

Where, value is the value that is returned to the calling function. The returned value's data type must coincide with the data type mentioned in the function specification.

Example of a Function in C

Here is an example of a simple function in C that takes two integer parameters and returns their sum:

#include <stdio.h>
int sum(int a, int b) {
int c = a + b;
return c;
}
int main() {
int result;
result = sum(5, 7);
printf("Sum of 5 and 7 is %d", result);
return 0;
}

Output:

Sum of 5 and 7 is 12

In this example, the function sum takes two integer parameters “a” and “b” and returns their sum as an integer value. The function is used in the main function, and the result variable stores the value that is returned.

Advantages of Functions in C

  1. Code Reusability: Functions in C can be called multiple times from different parts of a program. This allows code to be reused, reducing the effort required to write and maintain the program.
  2. Improved Readability: Functions provide a way to organize the code into smaller, more manageable units. This increases the readability and understanding of the software.
  3. Modularity: Functions in C allow the program to be divided into smaller blocks of code, making it easier to debug and maintain. If a problem occurs in one part of the program, only that part of the code needs to be debugged, rather than the entire program.
  4. Improved Maintainability: Functions can be modified or updated individually, making it easier to maintain the program. By doing this, the chance that programme updates may fail is decreased.
  5. Better Code Organization: Functions provide a way to organize the code into smaller, related blocks, making it easier to understand the structure and logic of the program.
  6. Abstraction: Functions provide a level of abstraction, allowing the programmer to concentrate on the functionality of the program without worrying about the details of how the function works.

Passing Parameters to Functions in C

Input parameters are a feature of C functions that can be used to pass data to the function.Passing parameters to functions in C can be done either by value or by reference.

Pass by Value: A copy of the parameter is sent to the function when a parameter is passed by value. Any modifications made to the parameter within the function have no effect on the parameter's original value because the function operates on the copy of the parameter.

Pass by Reference: A reference to the parameter is supplied to the function when a parameter is passed by reference.This means that the function operates on the original value of the parameter, and any changes made to the parameter within the function are reflected in the original value.

When passing parameters to functions in C, it is important to ensure that the correct method of passing parameters is used. In general, pass by value is used when the function does not need to modify the original value of the parameter, while pass by reference is used when the function does need to modify the original value of the parameter.

Example of Passing Parameters to Functions in C

Here is an example of passing parameters to a function in C:

Example:

#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
   *a = *b;
   *b = temp;
}
int main() {
int x = 5, y = 10;
printf("Before swapping: x = %d, y = %d\n", x, y);
swap(&x, &y);
printf("After swapping: x = %d, y = %d\n", x, y);
return 0;
}

Output -:

Before swapping: x = 5, y = 10
After swapping: x = 10, y = 5

In this example, the function swap takes two parameters, “a” and “b”, which are pointers to integers. The function swaps the values of x and y by using pass by reference.

Conclusion:

A C program can be divided into smaller, easier to handle components using functions. Code reuse is made possible by functions, which also improve readability and maintenance. To use functions in C, you need to define the function, specify its parameters, and implement its statements.

Functions in C are a powerful and essential feature of the language that provide a way to organize and structure code into smaller, more manageable units. By using functions, the program can be made more readable, maintainable, and reusable.

Recursion in C Programming

Recursion is a programming method where a function calls itself to solve an issue. It is a powerful tool that allows a programmer to write elegant and concise code for solving complex problems. Recursion can be used to solve problems ranging from mathematical algorithms to tree traversal, and is an important concept for any programmer to understand. This article will provide an introduction to recursion in C and explore some of the most common use cases for the technique.

What is Recursion?

In computer programming, recursion is a technique where a function calls itself to solve a problem.In order to avoid infinite recursion; the function must include a termination condition that specifies when the recursion should stop. The termination condition is also known as the base case. In the base case, the function returns a value without making any further calls itself.

Why do we use Recursion?

Recursion is a powerful tool that allows a programmer to write elegant and concise code for solving complex problems. It offers a straightforward and elegant method of segmenting an issue into more manageable subproblems. This allows for easy problem-solving and can greatly simplify the code.

How to Use Recursion in C?

To use recursion in C, a programmer must define a function that calls itself to solve a problem. The function must include a termination condition, or base case, that specifies when the recursion should stop. In addition, the function must have a recursive call that breaks the problem down into smaller, more manageable sub-problems.

Let's look at an example to better understand how recursion works in C. Think about the challenge of determining a given number's factorial. The sum of all positive numbers less than or equal to n is known as a factorial.In mathematical terms, the factorial of n can be represented as n! = n * (n-1) * (n-2) * ... * 2 * 1.

Here's how we could write a recursive function in C to solve this problem:

#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
   }
return n * factorial(n-1);
}


int main() {
intnum = 5;
printf("Factorial of %d is %d", num, factorial(num));
return 0;
}

Output:

Factorial of 5 is 120.

In this example, the function factorial calls itself to solve the problem of finding the factorial of a given number. The function includes a termination condition, or base case that specifies that if n is equal to 0, the function should return 1. In the recursive call, the function calls itself with a parameter of n-1, which reduces the problem to finding the factorial of a smaller number.

Common Use Cases for Recursion in C

There are many different use cases for recursion in C, ranging from mathematical algorithms to tree traversal.

The following are some of the most typical applications for recursion:

  1. Factorials: As we saw in the example above, recursion can be used to solve mathematical problems such as finding the factorial of a number.
  2. Fibonacci sequence: Another common use case for recursion is finding the nth number in the Fibonacci sequence. The Fibonacci sequence is a series of numbers in which each number is the sum of the two preceding ones.
  3. Tree Traversal: Recursion can be used to traverse a tree and process the nodes in a particular order, such as in-order, pre-order, or post-order traversal.
  4. Binary Search: Recursion can be used to perform binary search on a sorted array, where the function is called repeatedly on either the left or right half of the array until the desired value is found.
  5. Tower of Hanoi: The Tower of Hanoi is a classic problem that can be solved using recursion. The problem involves moving a stack of discs from one peg to another, subject to the rule that a larger disc cannot be placed on top of a smaller disc.
  6. Merge Sort: Merge sort is a popular sorting algorithm that can be implemented using recursion. In this algorithm, the array is divided into two halves and each half is sorted separately. The sorted halves are then merged back together.
  7. Backtracking: Recursion can be used in backtracking algorithms, where a problem is solved by trying out different solutions and backtracking when a solution does not work.

It is important to note that recursion should be used with caution, as it can lead to stack overflow if the termination condition is not reached. This can happen when the function calls itself infinitely without reaching the base case. Therefore, it's important to ensure that the base case is well-defined and reached in a timely manner.

It is also important to understand the performance implications of recursion. Recursion can lead to slower performance compared to other techniques, as each function call requires additional memory on the call stack. In addition, the number of function calls required for a recursive solution can grow quickly, which can result in increased memory usage.

To address the performance limitations of recursion, it is often necessary to use iterative techniques instead. For example, instead of using recursion to find the nth Fibonacci number, an iterative approach can be used that involves looping through the sequence and keeping track of the previous two numbers. This can result in faster performance and lower memory usage.

Another consideration when using recursion is the choice of data structures. For example, when traversing a tree, it is important to choose an appropriate data structure that allows for efficient traversal and manipulation of the nodes. In some cases, a linked list may be a better choice than an array, as it allows for dynamic memory allocation and can result in improved performance.

Finally, it is important to choose the right level of abstraction when using recursion. In some cases, it may be necessary to provide more detailed information to the function, such as the current node in a tree traversal, to ensure that the correct solution is found. On the other hand, too much information can result in overly complex code that is difficult to understand and maintain.

It's also worth mentioning that recursion can be combined with other programming techniques to solve complex problems. For example, recursion can be used in conjunction with dynamic programming to solve problems that involve finding the optimal solution for a given set of constraints. Dynamic programming involves breaking down a problem into smaller sub-problems and storing the results of each sub-problem to avoid redundant computation. This technique can be combined with recursion to improve performance and reduce the number of function calls required.

Another example of combining recursion with other techniques is the use of memoization. Memoization is a technique for storing the results of expensive function calls so that the results can be reused in future calls without having to recompute the result. This technique can be used with recursion to improve performance, as the results of each function call can be stored in a table and reused in future calls, reducing the number of calls required.

In some cases, recursion can be used as an alternative to iteration, as recursion provides a more intuitive solution to some problems. For example, recursion can be used to implement a depth-first search, where the algorithm visits all the nodes in a tree by visiting the nodes at the deepest level first. This can be done by recursively visiting the children of each node until a leaf node is reached, and then backtracking to visit other nodes.

In summary, recursion is a powerful technique in computer programming that allows for elegant and concise solutions to complex problems. It can be used in a wide range of applications, from mathematical algorithms to tree traversal. With proper use of termination conditions, data structures, and abstraction, a programmer can write efficient and effective code that makes use of recursion. Additionally, recursion can be combined with other techniques, such as dynamic programming and memoization, to improve performance and solve complex problems.