本文原创文章,转载注明出处,博客地址 https://segmentfault.com/u/to... 第一时间看后续精彩文章。以为好的话,顺手分享到朋友圈吧,感谢支持。segmentfault
咱们把一个直接调用本身或经过一系列的调用语句间接地调用本身的函数,称作递归函数数组
//版本1:迭代版本 func Fbi1(i int) int { switch i { case 0: return 0 case 1: return 1 default: arr := make([]int, i+1, i+1) arr[0] = 0 arr[1] = 1 for j := 2; j <= i; j++ { arr[j] = arr[j-1] + arr[j-2] } return arr[i] } }
//版本2:递归版本 func Fbi2(i int) int { switch i { case 0: return 0 case 1: return 1 default: //递归调用 return Fbi2(i-1) + Fbi2(i-2) } }
视不一样状况选择不一样的代码实现方式函数
递归过程分为前行和退回阶段,编译器使用栈实现递归;前行阶段,每一层递归,函数的局部变量、参数值以及返回地址都被压入栈,在退回阶段,位于栈顶的局部变量、参数值和返回地址被弹出,恢复了调用的状态code
咱们把队列的这种头尾相接的顺序存储结构称为循环队列递归
队列的链式存储结构,就是线性表的单链表,只能尾进头出队列
总结:能够肯定队列长度最大值的状况下,建议用循环队列,若是没法预估队列长度,则用链队列内存