c语言函数的迭代与递归_递归与迭代

c语言函数的迭代与递归_递归与迭代斐波那契数列:11235813213455…fb(n):1n<=2fb(n-1)+fb(n-2)n>2intfb(n){if(n<=2){return1;}else{returnfb(n-1)+fb(n-2);}}使用递归需进行,如果递归的深度并不是很深,便可以使用。递归的子问题一定要有解。(即递归一定要有回归条件。)递归有两个过程…

大家好,又见面了,我是你们的朋友全栈君。

斐波那契数列:

1 1 2 3 5 8 13 21 34 55 …

fb(n) :

1 n <= 2

fb(n-1) + fb(n-2) n > 2

int fb(n)

{

if(n <= 2)

{

return 1;

}

else

{

return fb(n-1)+fb(n-2);

}

}

使用递归需进行,如果递归的深度并不是很深,便可以使用。递归的子问题一定要有解。(即递归一定要有回归条件。)

递归有两个过程:

递推:层层推进,分解问题

回归:层层回归,返回较大问题的解

递归函数的缺陷:

1.对栈的依赖性太高,需要耗费大量的栈空间来实现递推过程

2.逻辑简单,好理解。

只要是函数,都可以自己调用自己,但是,禁止main调用main函数。(即main自己调用自己)(容易产生栈的上溢。)

使用迭代来实现斐波那契数列:

int fb(n)

{

if(n <= 2)

{

return 1;

}

int n1 = 1, n2 = 1, n3 = 0;

int i = 0;

for(i = 3; i <= n; i++)

{

n3 = n1 + n2;

n1 = n2;

n2 = n3;

}

return n3;

}

递归和迭代的区别:

1.什么是递归

是一种算法思想:是将大问题分解成若干个结构相同的子问题,只有解决子问题才能求得大问题的解。我们将这样的算法思想称之为递归。

在C语言中,有一种函数,该函数可以在函数体中调用自己,这样函数称之为递归函数。

递归有两个过程:

递推

回归

2.什么是迭代

迭代是对递归的一种优化,递归将递推的过程交给了计算机,让计算机代替人去分析问题。而迭代将递推(归纳抽象解决方案)的过程交给

了程序员。进而减小了机器在递推过程中对栈的消耗,大大提高了算法效率。

3.递归的特点

1.解放了人

2.对栈的消耗大

3.算法的效率低下,不能过多层的递归

4.迭代的特点

1.需要人去分析迭代过程

2.减小的对栈的开销

3.算法的效率高

5.什么时候使用递归

1.递归层次不多

2.对于栈消耗不是很大时

6.什么时候使用迭代

如果一个问题,可以使用迭代来实现,就尽量使用迭代。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135253.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Hive 数据类型

    Hive 数据类型简介以下介绍Hive的数据类型,Hive的数据类型分为四种类型,分别是:列类型文字Null值复杂类型列类型整型可以指定使用整型数据类型,下表描述了各种INT数据类型。(TINYINT&amp;amp;amp;lt;SMALLINT&amp;amp;amp;lt;INT&amp;amp;amp;lt;BIGINT)类型(后缀)示例TINYINT(Y)10YSMALLINT(S)1

    2022年9月22日
    2
  • Thinkpad X201拆机清灰[通俗易懂]

    Thinkpad X201拆机清灰[通俗易懂]这个是我自己的本本,买的时候是二手,两年一直工作正常。最近温度飙升,经常保护性关机。拆机第一步还是从底部开始,先卸电池下来。拆下内存盖板,漏出内存。这里的内存有一条是我自己加的。侧面是硬盘,这个位置跟其他本本不太一样。键盘从正面上方可以撬开,掀开要注意,小心排线。排线拔下来后,就可以继续拆主板。这个这个是左上的排线。主板上的螺钉拆完后,就可以掀起来了。高温的罪魁祸首散热片要拆下来清洗。厚厚一层清理完后,温度降低40度。效果明显。…

    2022年4月19日
    580
  • win10工作站和服务器版对比_服务器类型

    win10工作站和服务器版对比_服务器类型Win10面世已经四年多了,越升级越卡,已经成为大家的共同评价。硬盘飙升100%、经常性C位卡顿、无端端的进程崩溃……每一次升级似乎都变成了一道选择题,升or不升?呵呵,这的确是个问题。几天前,有位网友向小编推荐了一款Win10版本,试用后发现这是真的牛!久违了的丝滑体验、硬盘评分大幅提升。最关键的是,这个版本一直在紧跟微软开发节奏,不像之前的LTSB版和LTSC版那样存在明显的功能缺失。非常适合…

    2025年8月5日
    3
  • spring boot 过滤器_拦截器和过滤器的区别面试

    spring boot 过滤器_拦截器和过滤器的区别面试原文地址:https://www.tsanyang.top/share-detail/739784336139616256.html最近实现一个权限控制功能,想通过拦截器进行实现,当业务一切按预期一样完成,有一个特别控制需要再拦截器对参数进行解析使用,但是发现当我们再拦截器读取了输入流,再控制器是无法获取到参数的,这个是由于输入流只能被读取一次,然后通过问题搜索了一把,看见网上通过重写HttpServletRequestWrapper实现输入流读取后,再写入回去,这样解决控制器无法获取参数问题,故在此做记

    2022年8月23日
    8
  • mysql时序性数据库_时序数据库入门[通俗易懂]

    mysql时序性数据库_时序数据库入门[通俗易懂]数据库的模型包含关系型、key-value型、Document型等很多种,那么为什么新型的时序数据库成为监控数据存储的新宠呢?下面就会从为什么需要时序数据库?时序数据库的数据结构两个方面来介绍一下时序数据库。1.为什么需要时序数据库1.1时序数据特点时序数据有如下几个特点:基本上是插入操作较多且无更新的需求数据带有时间属性,且数据量随着时间递增插入数据多,每秒钟插入需要可到达千万甚至是上…

    2022年10月5日
    3
  • pycharm查找与替换_python替换dataframe中的值

    pycharm查找与替换_python替换dataframe中的值WindowsCtrl+Shift+F全局查找Ctrl+Shift+R全局替换Ctrl+F当前文件查找Ctrl+R当前文件替换MACcommand+F全局查找command+R全局替换快捷键无响应,可能是和其他运行中的软件热键冲突…

    2022年8月27日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号