golang2021函数与包(27)递归函数

通过前面的学习知道一个函数可以调用其他函数 。
如果一个函数在内部不调用其它的函数 , 而是自己本身的话 , 这个函数就是递归函数 。
例如:
golang2021函数与包(27)递归函数

golang2021函数与包(27)递归函数

注意:递归函数的执行流程
递归函数的作用:
举个例子 , 我们来计算阶乘n!=1*2*3*...*n
其它应用场景:
电商网站中的商品类别菜单的应用 。
查找某个磁盘下的文件 。
函数的递归调用
基本介绍
一个函数在函数体内又调用了本身 , 我们称为递归调用
递归调用快速入门
?代码1
golang2021函数与包(27)递归函数

上面代码的分析图:
golang2021函数与包(27)递归函数

?代码2
golang2021函数与包(27)递归函数

对上面代码分析的示意图:
golang2021函数与包(27)递归函数

递归调用的总结
函数递归需要遵守的重要原则:
1)执行一个函数时 , 就创建一个新的受保护的独立空间(新函数栈)
2)函数的局部变量是独立的 , 不会相互影响
3)递归必须向退出递归的条件逼近 , 否则就是无限递归 , 死龟了:)
4)当一个函数执行完毕 , 或者遇到return , 就会返回 , 遵守谁调用 , 就将结果返回给谁 , 同时当
函数执行完毕或者返回时 , 该函数本身也会被系统销毁
递归课堂练习题
?题1:斐波那契数请使用递归的方式 , 求出斐波那契数1,1,2,3,5,8,13...给你一个整数n , 求出它的斐波那契数是多少?思路:
1)当n==1||n==2,返回1
2)当n>=2,返回前面两个数的和f(n-1)+f(n-2)
代码:
golang2021函数与包(27)递归函数

?题2:求函数值
已知f(1)=3;f(n)=2*f(n-1)+1;请使用递归的思想编程 , 求出f(n)的值?思路:
直接使用给出的表达式即可完成代码:
golang2021函数与包(27)递归函数

?练习题3
题3:猴子吃桃子问题有一堆桃子 , 猴子第一天吃了其中的一半 , 并再多吃了一个!以后每天猴子都吃其中的一半 , 然后
再多吃一个 。 当到第十天时 , 想再吃时(还没吃) , 发现只有1个桃子了 。 问题:最初共多少个桃子?思路分析:
1)第10天只有一个桃子
2)第9天有几个桃子=(第10天桃子数量+1)*2
3)规律:第n天的桃子数据peach(n)=(peach(n+1)+1)*2
【golang2021函数与包(27)递归函数】代码:
golang2021函数与包(27)递归函数

golang2021函数与包(27)递归函数