尾递归

2019-11-09  本文已影响0人  Tomtoms

尾递归

爆栈问题

基于栈实现函数调用的语言都有栈空间的上限,这里拿几个语言举例

#include <stdio.h>

int foo(int n){
    printf("%d\n", n);
    return foo(n+1);
}

int main()
{
    foo(1);
    return 0;
}

运行到258914次的时候出现segmentation fault

258911
258912
258913
258914
[1]    25175 segmentation fault  ./trait
def foo(n):
    print(n)
    return foo(n+1)

foo(1)

运行到992次就爆栈了

993
994
995
996
Traceback (most recent call last):
  File "trait.py", line 5, in <module>
    foo(1)
  File "trait.py", line 3, in foo
    return foo(n+1)
  File "trait.py", line 3, in foo
    return foo(n+1)
  File "trait.py", line 3, in foo
    return foo(n+1)
  [Previous line repeated 992 more times]
  File "trait.py", line 2, in foo
    print(n)
RecursionError: maximum recursion depth exceeded while calling a Python object

如何解决

解决爆栈的方式无非就两种

Go和lua的实现

function foo(n)
    print(n)
    return foo(n+1)
end
foo(1)
package main

import "fmt"

func foo(n int) int {
    fmt.Println(n)
    return foo(n+1)
}

func main() {
    foo(1)
}
上一篇下一篇

猜你喜欢

热点阅读