|
发表于 2023-6-13 08:34:28
|
显示全部楼层
你的理解基本上是正确的,但是你可能对递归函数的返回方式有些误解。在这个函数中,每次函数被调用,它将执行一些操作(乘法),然后调用自己,直到n=1。在n=1时,函数返回1,并结束此次调用。
现在关键的是理解,这个“返回1”并不是说整个函数调用链的返回值是1,而是最内层的那一次函数调用的返回值是1。
举个例子,当你调用factorial(5)时,实际上下面这样的函数调用链被创建:
1. factorial(5) = 5 * factorial(4)
2. factorial(4) = 4 * factorial(3)
3. factorial(3) = 3 * factorial(2)
4. factorial(2) = 2 * factorial(1)
5. factorial(1) = 1
所以,当factorial(1)返回1时,这个1会被返回到上一层的调用中,即factorial(2) = 2 * 1,得到2。然后这个2又会被返回到上一层的调用中,即factorial(3) = 3 * 2,得到6。以此类推,最后在最顶层的调用中得到5 * 24 = 120。
所以说,虽然在递归的最底层,函数返回的是1,但是这个1被逐层上升,通过每一层的乘法操作,最终得到了120,这就是factorial(5)的结果。 |
|