Ошибка в тестовых случаях для проблемы рекурсии - PullRequest
0 голосов
/ 27 апреля 2020

Я решаю код для конкурентного программирования, и мой код, который я считаю правильным, выдает ошибку для некоторых тестовых случаев: Вопрос в том, чтобы найти общее число цифр в целом числе с помощью рекурсии.

Мой код:

import java.util.*;
import java.io.*;
import java.lang.*;

class Driver_class
{
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();

        while(t-- > 0)
        {
            int n =sc.nextInt();  // taking number "n" as input
            System.out.println(new Digitcount().countDigits(n)); // prints the count of digits 
        }
    }
}


class Digitcount
{
    static int count=0;
    public static int countDigits(int n)
    {
        if(n<1)
            return 0;
        countDigits(n/10);
        count++;
        return count;
    }
}

Переменная count - это общее количество цифр. Тестовый случай, что этот код не проходит: failed test case

Однако этот код проходит все тестовые случаи:

class Digitcount
{
    static int count=0;
    public static int countDigits(int n)
    {
        if(n<1)
            return 0;
        return countDigits(n/10)+1;
    }
}

Я не вижу разницы ни в одном из мои коды относительно выходного значения. Что является причиной того, что первый код не прошел тестовый пример?

1 Ответ

2 голосов
/ 27 апреля 2020

Разница заключается в использовании переменной c. Он будет держать результат между тестами и, следовательно, в любом тесте после первого он будет некорректным. Если у вас есть два вызова один за другим, например, так:

int a = countDigits(605);    
int b = countDigits(605);

Результат будет a==3, b==6 - первый результат переносится на второй вызов.

...