MATLAB 递归函数 [因子]

问题描述

代码有效,但我很困惑。当 n==1 时,我正在分配 a=1,这不应该覆盖该值并只返回 1 吗?

format compact
fct(5)

function a = fct(n)
    if n==1
       a = 1; 
    else 
       a = n*fct(n-1);
    end
end

解决方法

这就是我的想象......下面是一个递归/阶乘图,显示了递归调用的级联效果。在最深的递归调用 fct(1) 被评估,它等于第一个 if 语句给出的 1。因此,每个递归调用都由更深层次的递归调用定义。我通常喜欢分解递归函数直到达到其终止情况。我想一种表述它的方式是“函数内的一个函数”,而不是一个循环。

Recursive Process


哪里,fct(1) → 1


format compact
fct(5)

function a = fct(n)
    if n == 1
       a = 1;
    else
       a = n*fct(n-1);
       fprintf("%d\n",a);
    end

end

累积/递归结果:

2
6
24
120

ans =
   120

我的首选结构:

format compact
fct(5)

function a = fct(n)
    if n > 1
       a = n*fct(n-1);
    else
       a = n;
    end
end