C语言递归实现阶乘:为何代码无需else return 1仍能运行?
为啥递归阶乘不用
else return 1也能正常运行? 嘿,这个问题我刚学C的时候也纠结过!其实核心原因是return语句会直接终止当前函数的执行,所以你写的代码里,else其实是隐含存在的,只是没写出来而已。
举个例子,假设你的代码是这样的:
int factorial(int n) { if (n == 0) return 1; return n * factorial(n - 1); }
咱们拆解一下执行逻辑:
- 当传入的
n等于0时,if条件成立,执行return 1,函数直接结束,后面的return n * factorial(n-1)根本不会被执行到。 - 当
n不等于0时,if条件不成立,跳过if块,直接执行后面的递归返回语句。
这种写法和带else的版本完全等价:
int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } }
只不过前者利用了return的终止特性,省略了else关键字而已——代码更简洁,但逻辑是一模一样的。
不过这里要提个小注意:如果传入负数的话,递归会无限调用下去(因为n永远不会降到0),最后会栈溢出,但这和有没有else没关系,是递归终止条件的覆盖问题。
内容的提问来源于stack exchange,提问作者HzAli
相关产品推荐
相关产品推荐

