这个递归函数接受两个输入参数,第一个(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
它不会停止,因为它首先计算第一个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
您还必须更新else
分支中的计数counts
变量,以避免未初始化的变量使用。
看看如何使用调试器手册。只需点击函数内的行号,即可运行代码。使用F10和F11键逐行评估代码。这有助于您了解程序的作用。