MATLAB 递归函数 [阶乘]
MATLAB recursive function [Factorials]
代码有效,但我很困惑。当 n==1
时,我正在分配 a=1
,那不应该覆盖值并且 return 只有 1 吗?
format compact
fct(5)
function a = fct(n)
if n==1
a = 1;
else
a = n*fct(n-1);
end
end
我是这样想的...下面是一个 recursion/factorial 图,显示了递归调用的级联效果。在最深的递归调用中,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
Cumulative/Recursive 结果:
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
代码有效,但我很困惑。当 n==1
时,我正在分配 a=1
,那不应该覆盖值并且 return 只有 1 吗?
format compact
fct(5)
function a = fct(n)
if n==1
a = 1;
else
a = n*fct(n-1);
end
end
我是这样想的...下面是一个 recursion/factorial 图,显示了递归调用的级联效果。在最深的递归调用中,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
Cumulative/Recursive 结果:
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