首页 > 解决方案 > 在Matlab中通过递归查找数字中数字的出现

问题描述

这个递归函数接受两个输入参数,第一个 (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

标签: matlab

解决方案


它不会停止,因为它首先评估第一个 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以避免未初始化的变量使用。

看看如何使用调试器手册。只需单击函数内的行号并运行代码。使用 F10 和 F11 键逐行评估您的代码。这有助于您了解程序的功能。


推荐阅读