int main()
{
  int i,n;
  printf("Enter the number");
  scanf("%d",&n);
  i=pali(n);
  if(n==i)
    printf("Number is pall");
  else
    printf("Not Pall");
}

int pali(int n)
{
  int r;
  static sum=0;
  if(n!=0)
  {
    r=n%10;
    sum=sum*10+r;
    pali(n/10);
  }
  return sum;
}


我使用了一个静态变量来求和。有没有办法不使用静态变量?

最佳答案

是的,典型的(“函数式”)方法是以函数参数的形式携带状态。通常,有必要/很高兴拥有第二个函数来执行实际的递归,您可以从为状态调用适当的初始值开始:

int do_pali(int sum, int n)
{
  if(n != 0)
  {
    const int r = n % 10;
    return do_pali(10 * sum + r, n / 10);
  }
  return sum;
}


然后,公共功能变为:

int pali(int n)
{
  return do_pali(0, n);
}


在具有内部功能的语言中,这可以更简洁地表达(GCC支持将此作为扩展)。

关于c - 我必须通过递归检查数字是否是回文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42668005/

10-11 22:09
查看更多