问题描述
代码有效,但我很困惑。当 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。因此,每个递归调用都由更深层次的递归调用定义。我通常喜欢分解递归函数直到达到其终止情况。我想一种表述它的方式是“函数内的一个函数”,而不是一个循环。
哪里,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