此递归函数有两个输入参数,第一个(A)是数字,第二个(n)是数字,检查A中n的出现。(通过在每次递归中删除其最后一位来更新A) 。似乎递归是无限的,基本情况(A == 0)是无效的,但是为什么。
` ` ` ` ` `
` `
` `
` `
` `
`
答案 0 :(得分:1)
它不会停止,因为它首先计算第一个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
您还必须在counts
分支中更新计数else
变量,以避免未初始化的变量使用。
看看如何使用调试器manual。只需单击函数内部的行号并运行代码。使用F10和F11键逐行评估您的代码。这可以帮助您了解程序的作用。