递归应用场景:1.数据定义是递归的-斐波那契数列,2.数据规模大-小解决方式一样-数组或者链表,常需要返回值,3.数据结构是递归的-二叉树;
递归是一种特殊函数,了解递归之前先了解透函数--参数-函数的头&返回值-函数的尾&函数内变量的作用域,作用域一般都在本栈中-但go有内存逃逸分析。使用递归,要么是问题的解决是递归的,要么是数据的结构是递归的。
操作相同,需要考虑栈与栈之间数据的不同。子栈比父栈数据规模更小,父栈把数据传递给子栈。或者子栈比父栈数据层次更深,子栈把数据发回给父栈。
同一个递归函数,可以理解为同一套加工数据的方法,也就是说同一套代码,递归函数调用子函数,每一个递归函数之间的区别在数据。
每一次递归调用,子函数都会继承父函数的数据-如果递归函数有参数的话。
递归,就是函数调用,被调用的函数干同样的事情,执行一样的逻辑;即操作是一样的;
每个函数的不同之处,在于函数传递参数不同,在go中,所有参数传递都是拷贝传递。但是在同一个函数里面分出去的叉,共享局部变量,并把局部变量拷贝走,去执行自己的操作。
递归函数因为也是一个函数,函数的属性-参数/返回值,分为3类:(先不说函数被分叉成了几个子函数调用)
有去有回 有去无回 ;这里的去,指的是函数调用子函数给子函数传递的数据,回指的是,函数体有没有返回值。
去的过程是规模的缩小,或者结构的递深。并且伴随传递参数的改变。
1 举例