F#中的递归函数

3

我不确定这是否是问这种问题的正确地方,请不要讨厌我。最近我在edx.org上开始学习F#,只是为了好玩。我们学了递归这一课程。该课程的作者给出了一个有趣的例子:

let rec T a =
    if a = 0 then
        2
    else
        T (a - 1) * a 

他把a设为4,输出结果为48。我一直在思考这个问题,但没想明白。因为4不等于0,所以我们得到T(4-1)*4,也就是12。由于a每次都减少1,那么哪个位置会得到结果12呢?是T(3-1)*12还是其他什么?我们如何得到结果48?

2
你能在调试器中逐步执行它吗?此外,尝试像你对待T(4)一样分解T(4-1)(即T(3))。缩减直到不再有对T的函数调用,然后相乘。 - D. Ben Knoble
如果你在那之后仍然感到困惑,我会提供一个答案。 - D. Ben Knoble
1个回答

5

T(4) = T(3)*4 = (T(2)*3)*4 = ((T(1)*2)*3)*4 = (((T(0)*1)*2)*3)*4) = 2*1*2*3*4 = 48

T(4)表示第四个数字,等于T(3)乘以4,T(3)又等于T(2)乘以3,以此类推。将所有的T值代入公式中得到结果为48。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接