Check palindrome by recursion in c

c++palindromerecursion

I have to check if a number is palindrome or not using recursion..i am using the following function but i am confused because whenever i use a while loop in place of if statement an infinite loop is generated!

Why is the while loop not working properly?

My code is:

#include<stdio.h>
int Check_Pal(int);
int main()
{
    int i,sum,n;
    printf("enter no");
    scanf("%d",&n);
    sum=Check_Pal(n);
    if(sum==n)
    {
        printf("palindrome");
    }
    else
    {
        printf("not a palindrome");
    }
    return 0;
}
int Check_Pal(int k)
{
    int r;
    static int sum=0;
    while(k!=0)//if i use an if its fine but while loop does not work 
    {
        r=k%10;
        sum = sum*10+r;
        Check_Pal(k/10);    
    }
    return sum;
}

Best Solution

You don't need to use a while loop in your code, because the recursive call to the function Check_Pal() gives the effect of a while loop.

Consider your code given below,

while(k!=0)
{
    r=k%10;
    sum = sum*10+r;
    Check_Pal(k/10);    
    ^
    |__ Here you are discarding the value returned by "int Check_Pal()"
}

Also to get proper results it might be better to declare the variable sum as global.

Try something like this,

int sum=0;

void Check_Pal(int k)
{
    int r;
    if(k!=0)
    {
        r=k%10;
        sum = sum*10+r;
        Check_Pal(k/10);    
    }
}

int main()
{
  int n;
  printf("enter no");
  scanf("%d",&n);
  Check_Pal(n);
  if(sum==n)
  {
      printf("\npalindrome");
  }
  else
  {
      printf("\nnot a palindrome");
  }
  return 0;
}
Related Question