在Matlab中通过递归查找数字中数字的出现

时间:2018-11-17 10:47:59

标签: matlab

此递归函数有两个输入参数,第一个(A)是数字,第二个(n)是数字,检查A中n的出现。(通过在每次递归中删除其最后一位来更新A) 。似乎递归是无限的,基本情况(A == 0)是无效的,但是为什么。

 ` ` ` ` ` `  
  `       `
   `     `
    `   `
     ` `
      `

1 个答案:

答案 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键逐行评估您的代码。这可以帮助您了解程序的作用。