Поиск совпадений цифры в числе с помощью рекурсии в Matlab - PullRequest
0 голосов
/ 17 ноября 2018

Эта рекурсивная функция принимает два входных аргумента. Первый (A) - это число, а второй (n) - это цифра, проверяющая наличие n в A. (A обновляется путем удаления последней цифры в каждой рекурсии) , похоже, что рекурсия бесконечна, а базовый случай (A == 0) недопустим, но почему.

function counts = countn(A,n)
    if (A == 0)
        counts= 0;
    end
    if (n == mod(A,10))
        disp(A);
        disp(floor(A/10));
        disp(mod(A,10));
        B = floor(A/10);
        counts = countn(B,n) + 1;

    else 
       B = floor(A/10);
       countn(B,n);
    end 
    end

1 Ответ

0 голосов
/ 17 ноября 2018

Он не останавливается, потому что сначала вычисляет первый оператор if if( A == 0), а затем if (n == mod(A,10)), где он переходит в ветвь else, и рекурсивно вызывает функцию снова.Так что это не останавливается в первом операторе if, как вы, вероятно, ожидали.

что-то вроде этого должно работать:

function counts = countn(A,n)
    if (A == 0)
        counts = 0;
    elseif (n == mod(A,10))
            disp(A);
            disp(floor(A/10));
            disp(mod(A,10));
            B = floor(A/10);
            counts = countn(B,n) + 1;
    else 
       B = floor(A/10);
       counts = countn(B,n);
    end 
end

Вы также должны обновить переменную count counts в ветви else, чтобы избежать неинициализированного использования переменных.

Посмотрите, как использовать отладчик manual .Просто нажмите на номер строки внутри вашей функции и запустите свой код.Используйте клавиши F10 и F11 для оценки вашего кода строка за строкой.Это поможет вам понять, что делает ваша программа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...