当前位置: 首页 > wzjs >正文

网站seo优化皆宣徐州百都网络不错凡科网怎么创建网站

网站seo优化皆宣徐州百都网络不错,凡科网怎么创建网站,建个网站需要多少钱?建网站要多少钱,网业搜索函数递归一、什么是函数递归二、函数递归的要点三、示例1.计算n的阶乘2.提取一个任意正整数的所有位数,按顺序排列3.获取第n个斐波那契数,最开始的两个数是1,1四、总结一、什么是函数递归 函数递归是一种解决问题的思想,是将一个…

函数递归

  • 一、什么是函数递归
  • 二、函数递归的要点
  • 三、示例
    • 1.计算n的阶乘
    • 2.提取一个任意正整数的所有位数,按顺序排列
    • 3.获取第n个斐波那契数,最开始的两个数是1,1
  • 四、总结

一、什么是函数递归

函数递归是一种解决问题的思想,是将一个大的问题化为一个一个小的问题(类似于剥洋葱),是在一个函数体内部自己调用自己的方法。递归就是递推加回归,是基于函数实现的。
例如:

// 第一个最简单的函数递归程序:int main()
{printf("hahaha\n");main();       // 在main函数体内再次调用自己,这就是递归return 0;
}

运行结果:

在这里插入图片描述

但是这是一个问题程序,因为没有临界条件,所以会死递归下去,最终导致出现上图中栈溢出(Stack overflow)。
因为每一次函数递归都会创建函数栈帧,此栈帧创建在内存的栈区,最终死递归,栈区空间消耗完毕,出现栈溢出的问题。

二、函数递归的要点

基于点一,函数递归有以下两个要点:

1. 函数递归要有临界条件,每次递归后都要逼近此条件,否则会出现死递归的情况,到达临界条件,将不再函数调用
2. 并不是所有的程序都能写成函数递归形式,并且就算是能写成函数递归的形式,在函数递归调用过程中会创建函数栈帧,产生运行时的开销(空间,时间),空间可能出现栈溢出的问题,时间影响运行效率,所以在某些程序中迭代(循环)和递归形式都能实现,并且递归实现代码比迭代实现更加复杂,那么还是使用迭代实现。

三、示例

1.计算n的阶乘

实现思路:
在这里插入图片描述

// 示例1:设计一个程序,计算n的阶乘
int func(int n)
{if (n == 0)return 1;elsereturn func(n - 1) * n;
}int main()
{// 计算n的阶乘int n = 0;scanf("%d", &n);int ret = func(n);printf("%d\n", ret);return 0;
}

递归过程:
在这里插入图片描述

2.提取一个任意正整数的所有位数,按顺序排列

实现思路:
在这里插入图片描述

// 示例2:设计一个程序,提取一个任意正整数的所有位数,按顺序排列
void func(int m)
{// 当m为一位数时,直接提取自身if (m >= 0 && m <= 9)printf("%d ", m % 10);else{func(m / 10);printf("%d ", m % 10);}
}int main()
{int m = 0;scanf("%d", &m);func(m);return 0;
}

递归过程:
在这里插入图片描述

3.获取第n个斐波那契数,最开始的两个数是1,1

实现思路:
在这里插入图片描述

// 示例3:设计一个程序,获取第n个斐波那契数,最开始的两个数是1,1
int fib(int n)
{if (n == 1 || n == 2){return 1;}else{return fib(n - 1) + fib(n - 2);}
}int main()
{int n = 0;scanf("%d", &n);int ret = fib(n);printf("%d\n", ret);return 0;
}

这里直接说出结果,这是一个有问题的递归程序,当n很大很大的时候,上述代码执行效率非常低下,因为:
在这里插入图片描述
所以这就是一个逻辑思维上运用递归的思想,但是递归实现出来有些许问题,正确的思路:
定文三个变量,a,b,c,让a等于0位置上的数据,b等于1位置上的数据,c等中于a加上b的数据,c就是我们所求的第n个斐波那契数。之后再先让b的值赋值给给a,c的值赋值给给b,循环下去,直到n>2才结束。最后返回c。

int fib(int n) {// 定义三个变量,a,b,c// a是第一个数字1,b是第二个数字1// c是我们所需要的第n个斐波那契数int a=1, b=1,c;// 当所求斐波那契数是前两个的时候,直接给定值即可if(n == 1 && n == 2)c=a;      // 此时斐波那契数就是1// 当所求斐波那契数是从第三个开始时while(n > 2){c = a + b;// 更新数据,注意别出现数据覆盖的情况a = b;b = c;n--; }// 返回斐波那契数return c;}

四、总结

上述的递归演示,第一个main函数内部再次调用自己导致出现栈溢出的错误是因为没有设定临界条件;前两个示例演示了如何分析一个程序如何变成递归思想,并且理清它的递归调用关系;最后一个示例就演示了在某写可以写成递归的程序,但是递归的实现有问题的这种程序,建议是使用迭代的思想去实现。


文章转载自:

http://PdKO7tP2.Lkrmp.cn
http://R61Wuzx0.Lkrmp.cn
http://UHPKML3e.Lkrmp.cn
http://0rtbuy8a.Lkrmp.cn
http://DFrYDMoG.Lkrmp.cn
http://596Yp4vf.Lkrmp.cn
http://0fBxIhdo.Lkrmp.cn
http://W7KNfX0J.Lkrmp.cn
http://E7RSrKkY.Lkrmp.cn
http://NiginEcc.Lkrmp.cn
http://DKT5jSOL.Lkrmp.cn
http://i7BJQCkA.Lkrmp.cn
http://VF8VCrs4.Lkrmp.cn
http://OeYTNxAB.Lkrmp.cn
http://nZ16zS40.Lkrmp.cn
http://XylNOxDi.Lkrmp.cn
http://1dO7XeA6.Lkrmp.cn
http://qKY0xPd0.Lkrmp.cn
http://16DWcp23.Lkrmp.cn
http://w4DFiZGm.Lkrmp.cn
http://7vPAByYB.Lkrmp.cn
http://r2FmHetb.Lkrmp.cn
http://POt7rl87.Lkrmp.cn
http://SNXtCxRc.Lkrmp.cn
http://NV2XCJrG.Lkrmp.cn
http://aIvzahnc.Lkrmp.cn
http://ES0BEmKI.Lkrmp.cn
http://tRJUjIEq.Lkrmp.cn
http://n6BYzCxx.Lkrmp.cn
http://eiKIOKl5.Lkrmp.cn
http://www.dtcms.com/wzjs/736330.html

相关文章:

  • 宣传网站建设方案模板地区门户网站 wap app
  • 专门做橱柜衣柜效果图的网站织梦手机网站模板安装
  • 网站建设求职信息青岛市网站建设
  • 创意网站 案例 下载成都企业展厅设计公司
  • wordpress全站广告位aspnet网站开发书
  • 深圳汽车网站建设阳高县网站建设
  • 网站发展的方向餐饮品牌设计哪个公司最好
  • 有个网站301什么做游戏奖金不被发现网站
  • 南京专业做网站的公司汕头网站建设制作方案
  • 企业宣传网站多大主机四川专做餐饮的网站
  • 域名备案查询站长之家网站开发 ie兼容
  • 公司做网站需要准备什么材料网络营销的发展趋势和前景
  • 做网站的销售能干什么网站安全加固
  • fms 视频网站建设谷歌推广哪家好
  • discuz网站建设教学视频长治网站制作怎么做
  • 墙外必去的网站厦门石材网站建设
  • 有哪些做图纸的网站广东省建设工程造价信息网官网
  • 大神做的动漫网站wordpress注册取消邮箱验证码
  • 东莞住房和城乡建设厅网站个人网站备案信息填写
  • 网站开发的有关公司苏州市住房和城乡建设局网站地震局
  • 263企业邮箱官方入口郑州seo排名优化
  • 深圳网站建设 诺骐网建设摩托车官网110
  • 中云建设集团网站怎么加速网页
  • 哪个素材网站免费特色专业建设网站
  • php企业网站开发pdf株洲seo排名
  • 江西建设银行官方网站seo推广效果
  • 厦门学校网站建设建设银行网站总是崩溃
  • dede网站优化网站开发培训费
  • 网站打开慢原因亚马逊官网入口
  • 长沙创建一个网站需要多少钱网站建设代理政策