今天一道面试题是一串规律数组1 1 2 3 5 8 13 21。。。(波非那切数列)要求写一个方法实现传入任意正整数n,返回对应n位置的值。代码如下,写了一个简单递归函数。
本来以为没什么问题,结果一运行unity直接卡死,当时以为自己写了什么死循环,结果检查之后确实找不到原因,回来之后自己再查询,因为当时测试的时候传入参数为100,所以猜想原因应该是递归调用层次太多。递归函数在运行时会执行压栈操作,当压栈次数太多时,导致堆栈溢出。
补充:递归的过程就是调用本身的过程,函数当中的变量是存储在栈中,当我们执行函数的时候变量会一直压入栈中,当函数执行完毕销毁的时候依次出栈,由于系统栈很小,栈满之后继续压栈就会导致栈溢出。