Он не останавливается, потому что сначала вычисляет первый оператор 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 для оценки вашего кода строка за строкой.Это поможет вам понять, что делает ваша программа.