递归和迭代

递归:指在函数的定义中使用函数自身的方法。

特点:把一个大型的复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,只需较少的代码就描述出解题过程需要多次重复的内容,大大减少了程序的代码量,但是通常使用递归效率不是很高。

递归函数分为调用和回退阶段,递归的回退顺序是他调用顺序的逆序。

迭代:重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。(while,do…while ,for等等)。
递归实现斐波那契数列

#include <stdio.h>
#include <stdlib.h>int main()
{int n = 0 ;scanf("%d",&n);for(int i = 1;i<n ;i++){printf("%d\n",Fib(i));}return 0;
}int Fib(int i){if(i==1){return 0;}else if(i==2){return 1;}else{return Fib(i-1)+Fib(i-2);}}

迭代实现斐波那契数列

#include <stdio.h>
#include <stdlib.h>int main()
{int i ;int a[40];a[0] = 0;a[1] = 1;printf("%d %d ",a[0],a[1]);for( i =2 ;i<40;i++){a[i] = a[i-1] +a[i-2];printf("%d ",a[i]);}return 0;
}

对比两种实现斐波那契的代码,迭代和递归的区别是:迭代使用的是循环结构,递归使用的是选择结构。

递归实现汉诺塔:

#include <stdio.h>
#include <stdlib.h>//汉诺塔
int main(){int n;printf("请输入汉诺塔的层数: ");scanf("%d",&n);printf("移动的步骤如下:\n");move(n,'x','y','z');return 0;
}//将n个盘子x借助y移动到z
void move(int n,char x, char y, char z){if(1==n){printf("%c-->%c\n",x,z);}else{move(n-1,x,z,y);//将n-1个盘子从x借助z移动到y上printf("%c-->%c\n",x,z);//将n个盘子从x移到z上move(n-1,y,x,z);//将n-1个盘子从y借助x移动到z上}
}

【数据结构】递归和迭代相关推荐

  1. 数据结构(邓俊辉):递归和迭代、分而治之和减而治之(2.例子)

    前文介绍了递归和迭代.减而治之和分而治之的概念. 数据结构(邓俊辉):递归和迭代.分而治之和减而治之(1.概念) 接下来举一些例子来解释: 以数组求和为例: 采用减而治之(线性递归)的办法: int ...

  2. 利用递归、迭代解决斐波那契数列问题与汉诺塔难题

    有人说,"普通程序员使用迭代,天才程序员使用递归",真是这样吗? 1.浅谈递归与迭代 <1>递归的基本概念: 程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个 ...

  3. C++两个函数可以相互递归吗_通俗讲:数据结构递归思想

    通俗讲:数据结构递归思想 脑容量有限,拒绝花里胡哨 一个递归求阶乘的例子 #如5的阶乘 f(6)=6*5*4*3*2*1 def f(int n) {if n <= 0 : return 1re ...

  4. 递归、迭代、分治、回溯、动态规划、贪心算法

    今天就简单来谈谈这几者之间的关联和区别 递归 一句话,我认为递归的本质就是将原问题拆分成具有相同性质的子问题. 递归的特点: 1.子问题拆分方程式,比如:f(n) = f(n-1) * n 2.终止条 ...

  5. √C语言--递归与迭代

    迭代 每一次对过程的重复 每一次迭代得到的结果作为下一次迭代的初始值 循环执行一次过程就是一次迭代 迭代需要用到循环 从前往后推理 递归 执行一个过程需要再次用到该过程 从后往前推理(先看到最后一步需 ...

  6. 算法 - 递归与迭代 区别与联系

    目录 迭代 递归 基本概念 应用场景 尾递归 递归与迭代区别 递归与迭代的转换 参考 文章放置于:https://github.com/zgkaii/CS-Notes-Kz,欢迎批评指正! 迭代 迭代 ...

  7. 回溯算法,递归和迭代

    递归在算法中很常见,比如下面两个例子. A-program // 二叉树中序递归版本 visit(root){if root==null; returnvisit(root.left) // 左树pr ...

  8. 一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程 (1)

    上节中提到了一些有关递归查询的内容,但说的很少,也很笼统,本节将会从原理和实例两方面入手分析DNS的递归以及迭代查询. 在此之前,我们需要了解一些背景知识,以便于更好的理解今天的主题内容. 在互联网中 ...

  9. LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法

    LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...

最新文章

  1. Qt利用avilib实现录屏功能_利用“别名”实现Sendmail的邮件群发和邮件备份功能...
  2. Vista 下的注册 com 类失败解决方法
  3. 【BZOJ3518】点组计数 [欧拉函数]
  4. selenium python 启动Chrome
  5. 二叉树的宽度 java_Java语言描述二叉树的深度和宽度
  6. 【机器学习系列】隐马尔科夫模型第二讲:前向算法、后向算法
  7. 多元统计分析最短距离法_多元统计分析-聚类分析
  8. hivesql uv
  9. 2020年携程校招开发方向第二题
  10. 线性回归实战:股价预测(未完)
  11. 【C++ 程序】 复数类 (Complex)
  12. 怀孕必读(非常实用)-怀胎的历程及注意事项
  13. bugku 二维码题目 多种方法解决、闪的好快、乌云邀请码
  14. python自定义函数实例计算1-n的偶偶数和_Python入门--11--自定义函数
  15. DOjo的一个幻灯片播放例子
  16. Bootstrap ——排版、表格、表单、图片、button 学习博客(二)
  17. 小程序预览加载不出图片
  18. linux安装宝塔面板命令大全
  19. Mui框架的遇到的问题记录
  20. 新浪微博应用开发入门

热门文章

  1. php 手机号用星号*代替的几种方法
  2. 抖音爆款短视频背后的拍摄技巧。丨国仁网络资讯
  3. 同步FIFO设计verilog设计及仿真
  4. 突破微信小程序模板消息的推送限制
  5. 华为注册鸿蒙商标注册,华为正式注册“鸿蒙”商标!新系统与安卓有什么不同之处?...
  6. 热搜!刚博士毕业的女教师看着比学生还小,网友:这种老师教课嘎嘎猛
  7. cs231n Assignment 1# two layer net详细答案及总结
  8. 记录WordPress代码实现QQ邮箱SMTP发送邮件
  9. 冒泡排序法(C++实现)
  10. tarjan求强联通分量