调用栈的特点,先进后出, FILO, 场景还原。
- 递归 有栈溢出的可能 stack overflow
public fab(int n) {
if (n == 0) return 1;
return n * fab(n - 1);
}
- 尾递归 编译器进行了优化,优化为循环,不会溢出
public fab(int n , int result = 1) {
if (n == 0) return 1;
return fab(n - 1, result * n);
}
尾递归的优化原理:尾调用优化
网友评论