Showing posts with label Recursion. Show all posts
Showing posts with label Recursion. Show all posts

Saturday, August 20, 2011

QuickSort using recursion

//QuickSort using recursion
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
main()
{
      int i,*a,n;
      void create(int **a,int n);
      void display(int *a,int n);
      void quicksort(int *a,int lb,int ub);
      extern int quick(int *s,int left,int right);

      a=NULL;
      printf("Enter the number of elements you want in your array : " );
      scanf("%d",&n);
      create(&a,n);
      display(a,n);
      quicksort(a,0,n-1);
      display(a,n);
     getch();
      return 0;
}
void create(int **a,int n)
{
     int i;
     int *s;
     s=(int *)malloc(n*sizeof(int));
     printf("\n Enter the value of array elements " );
     for(i=0;i<n;i++)
     {
                  scanf("%d",&s[i]);
     }
     *a=s;
}
void display(int *a,int n)
{
     int i;
     printf("\n array elements " );
     for(i=0;i<n;i++)
     {
                  printf("%d ",a[i]);
     }
}
void quicksort(int *a,int lb,int ub)
{
     int loc;
     if(lb<ub)
     {
         loc= quick(a,lb,ub);
          quicksort(a,lb,loc-1);
          quicksort(a,loc+1,ub);
     }  
                       
}
int quick(int *s,int left,int right)
{
    int loc,temp;
    loc=left;
    while(1)
    {
            while(s[loc]<=s[right]&&loc!=right)
              {
                  right=right-1;
             
              }
            if(loc==right)
              return loc;
            if(s[loc]>s[right])
            {
               temp=s[loc];
               s[loc]=s[right];
               s[right]=temp;
            }
         
            loc=right;
            while(s[left]<=s[loc]&&loc!=left)
              left=left+1;
            if(loc==left)
              return loc;
            if(s[left]>s[loc])
            {
               temp=s[loc];
               s[loc]=s[left];
               s[left]=temp;
            }
            loc=left;
    }
       
}

Tower of Hanoi

//Tower of Hanoi
#include<stdio.h>
#include<conio.h>
main()
{
      int n;
      void Tower(char beg,char inter,char end,int n);
      printf("Enter how many pins you want to move: ");
      scanf("%d",&n);
      Tower('A','B','C',n);
      getch();
      return 0;
}
void Tower(char beg,char inter,char end,int n)
{
     if (n==1)
     {
              printf("\n%c->%c",beg,end);
              return;
     }
     Tower( beg,end,inter,n-1);
          printf("\n%c->%c",beg,end);
      Tower(inter,beg,end,n-1);     
}

Binary search using Recursion

//Binary search using Recursion
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
main()
{
      int i,*a,n,p;
      void create(int **a,int n);
      void display(int *a,int n);
      int search(int a[],int item,int beg,int end);
      a=NULL;
      printf("Enter the number of elements you want in your array : " );
      scanf("%d",&n);
      create(&a,n);
   
       printf("Enter the number to be search : " );
      scanf("%d",&p);
      i=search(a,p,0,n);
      if(i==-1000)
      printf("\nitem no found");
      else
      printf("\n item is found at position %d",i+1);
     getch();
     display(a,n);
      return 0;
}
void create(int **a,int n)
{
     int i;
     int *s;
     s=(int *)malloc(n*sizeof(int));
     printf("\n Enter the value of array elements " );
     for(i=0;i<n;i++)
     {
                  scanf("%d",&s[i]);
     }
     *a=s;
}
void display(int *a,int n)
{ int i;
      printf("\n array elements " );
     for(i=0;i<n;i++)
     {
                  printf("%d ",a[i]);
     }
}  
int search(int a[],int item,int beg,int end)
{
    int mid=(beg+end)/2;
    if (beg>end)
    return -1000;
    if(a[mid]==item)
     return mid;
    if(a[mid]>item)
     return search(a,item,beg,mid-1);
    else
    return search(a,item,mid+1,end);
}

Find nth term in fibnacci series using Recursion

//Find nth term in fibnacci series using Recursion.
#include<stdio.h>
#include<conio.h>
main()
{
      int n;
      int fib(int prev,int curr,int n);
      printf("Enter the whichth number you want to see in fibnacci series :");
      scanf("%d",&n);
      printf("\n the term is %d",fib(1,1,n));
      getch();
      return 0;
}
int fib(int prev,int curr,int n)
{
    if(n==0)
    return 0;
    if(n==1)
    return prev;
    return fib(curr,prev+curr,n-1);    
}

Efficient code to find exponential(power) of given number using recursion.

//Efficient code to find exponential(power) of given number using recursion.
#include<stdio.h>
#include<conio.h>
main()
{
      int n,p;
      int exp(int n,int p);
      printf("Enter the number :");
      scanf("%d",&n);
      printf("Enter the power you want to compute :");
      scanf("%d",&p);
      printf("\n the term is %d",exp(n,p));
      getch();
      return 0;
}
int exp(int n,int p)
{
    if(p==0)
    return 1;
if(p%2==0)
return exp(n*n,p/2);
else
return (exp(n*n,p/2)*n);
}

Next Home
Twitter Delicious Facebook Favorites More