递归算法代码简洁清晰,易于验证,但时间上与空间消耗较大,因为他有嵌套函数调用,如果调用层数太深,会存在堆栈溢出的风险,而迭代的形式相复杂,但效率较高,往往有这样的观点,等不用递归就不用递归递归都可以用迭代来代替,从理论上讲,递归和迭代在时间复杂度方面是等价的,在不考虑函数调用开销和函数调用产生的堆栈开销情况下,但实际上,递归确实效率比替代低,迭代是利用变量的原值推算出变量的一个新值,他是从前向后归纳推演的过程,通过前面的过程函数不停的调用,后面的过程函数解决问题,而递归却是一个从后向前再向后的推演过程,给自己调用自己,既然这样递归没有任何优势,是不是就没有使用递归的必要了,那递归存在的意义是什么呢
从算法结构来说,递归声明的结构并不总能转化为迭代结构,原因在于结构的引申本身属于递归的概念,用迭代的方法,在设计初期,根本无法实现,因此,在结构设计时,通常采用递归的方式,而不是采用迭代的方式,一个极典型的例子就是链表使用递归定义,他极其简单,但是用非递归的方式去对其进行定义及调用处理,说明就比较困难,因为这些问题的底层数据结构本身就是递归,尤其是在遇到还链,图,网格等问题时,使用迭代的方式,从描述到实践上都会变得不现实。

例题小猴子摘桃

有一群猴子,去摘了一堆桃子商量之后决定每天吃剩余桃子的一半

当每天大家吃完桃子之后,有个贪心的小猴都会偷偷再吃一个桃子

按照这样的方式猴子们每天都快乐的吃着桃

直到第十天,当大家再想吃桃子时,发现只剩下一个桃子了

问:猴子们一共摘了多少桃子

斐波那契数列问题(用迭代的方法)

斐波那契数列是一组第一位和第二位为1,从第三位开始,后一位是前两位和的一组递增数列,

像这样的:1、1、2、3、5、8、13、21、34、55......

#include"iostream"
using namespace std;
int f(int n)
{if(n==1||n==2){return 1;}else{int f1=1,f2=1,fn=0;int i;for(i=3;i<=n;i++){fn=f1+f2;f1=f2;f2=fn;}return fn;} }
int main(){int i,j;cin>>i;j=f(i);cout<<j;
} 

迭代与递归的区别(斐波那契数列和小猴子摘桃)相关推荐

  1. 用递归法计算斐波那契数列的第n项

     斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...

  2. 递归和循环:斐波那契数列

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 解题思路 递推公式f(n)=f(n)= 当n=0=0,当n=0 当 ...

  3. python 递归方式实现斐波那契数列

    python 递归方式实现斐波那契数列 import time t1=time.time() def factorial(n):if n==1 or n==2:return 1else:return ...

  4. python装饰器模式带参数_Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)...

    Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...

  5. C语言递归算法求斐波那契,递归法求斐波那契数列(C语言版)

    斐波那契数列: 又称黄金分割数列,指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 在数学上,斐波纳契数列以如下被以递归的方法定义 ...

  6. 递归与分治——斐波那契数列非递归,递归,与优化后的递归算法

    斐波那契数列: 1.1.2.3.5.8.13.21.-- 简单说,就是前两项的和是第三项的值. 1.求第N个斐波那契数的值(非递归) //斐波那契数列 int fun(int n) {int a = ...

  7. 递归——阶乘加斐波那契数列(简单掌握递归思想的敲门砖)

    话不多说,先上源码: 阶乘: #include<iostream> #include<bits/stdc++.h> using namespace std;int JieChe ...

  8. day16:递归思想——Fibonacci 斐波那契数列

    一.斐波那契数列(Fibonacci sequence),又称黄金分割数列,这个数列最早是由印度数学家提出来的. 该序列的前几项是这样的:0,1,1,2,3,5,8,13,21,34,⋯ 在数学上,斐 ...

  9. Python之递归(含斐波那契数列和汉诺塔)

    Python递归 一.什么是递归? 递归就是在调用一个函数的过程中,直接或者间接的调用函数自身这就叫递归. 二.实例 这里讲一下递归的注意点: (1)调用一次函数就会在内存里开辟栈帧空间,在调用结束后 ...

最新文章

  1. Java开源权限管理中间件
  2. 操作系统和常用软件下载
  3. BizTalk 开发系列(四十) BizTalk WCF-SQL Adapter读取SQL Service Broker消息
  4. App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
  5. Eclipse下创建Spring MVC web程序--非maven版
  6. STM8S——watchdog(IWDG)
  7. querydsl动态 sql_JPA整合Querydsl入门篇
  8. Symfony 上传图片教程
  9. java opencv 纠偏_一种基于OpenCV的高拍仪拍摄文档物体纠偏方法与流程
  10. 为什么买域名必须实名认证?这样做什么原因?
  11. 学计算机拼音不好怎么办,孩子拼音基础差怎么办?告诉你学拼音技巧!
  12. 生命的火花盛开与如幻如梦
  13. eureka 缺点
  14. 99行拓扑优化matlab程序解读,99行拓扑优化 代码解析
  15. python_习题一
  16. Android sim卡 pin码解锁流程.
  17. MATLAB几个误差参数说明
  18. 电路b-3—06刘晏辰
  19. 2021年度训练联盟热身训练赛第一场 A.Weird Flecks, But OK (最小覆盖圆)
  20. BILSTM原理介绍

热门文章

  1. 攻防世界web_warm up
  2. 为Nginx开启SSI模块以支持SHTML及include文件引入
  3. 【19调剂】成都理工大学招收石油、计算机、机械和物理化学等相关专业的工科研究生,欢迎莘莘学子报考!...
  4. assert函数--判断表达式是否正确
  5. 基于curator实现leader选举
  6. webdriver爬取网易云歌单信息
  7. linux inode目录,Linux目录与inode 深入理解
  8. innerHtml click事件
  9. 数据结构精品电子书分享之《数据结构C语言版》
  10. 标准信息公共服务:某市标准技术研究院数据治理项目