递归持久化的一个数字

时间:2018-04-17 18:58:22

标签: c

我试图找到一个数字的持久性。当您将数字的数字相乘时,最终您将得到一位数字。持久性是指所需的循环次数。我试图找到使用递归函数。这是我的代码:

#include <stdio.h>

int persistence(int x);

int main(int argc, char *argv[])
{
  int x, per = 0, t;
  char c;
  while((c = getchar())!= EOF)
    {
      printf("Enter a number:\n");
      scanf("%d", &x);
      while(x>10)
        {
           t = persistence(x);
           printf("\n%d", persistence(t));
           per++;
         }
      printf("\n%d\n\n", per);

    }
  return 0;
}

int persistence(int x)
{
  if(x<10)
    {
      return x;
    }
  else
    {

      return (x%10 * persistence(x/10));
    }
}

1 个答案:

答案 0 :(得分:1)

函数persistence本身应该返回乘法持久性的值。

可以通过以下方式定义,如演示程序中所示。

#include <stdio.h>

size_t persistence( unsigned int x )
{
    const unsigned int Base = 10;

    if ( ! ( x < Base ) )
    {
        unsigned int n = 1;
        do { n *= x % Base; } while ( x /= Base );
        return 1 + persistence( n );
    }
    else
    {
        return 0;
    }       
}

int main(void) 
{
    unsigned int x = 39;

    printf( "persistence( %u ) = %zu\n", x, persistence( x ) );

    return 0;
}

程序输出

persistence( 39 ) = 3