迭代与递归的区别(斐波那契数列和小猴子摘桃)
递归算法代码简洁清晰,易于验证,但时间上与空间消耗较大,因为他有嵌套函数调用,如果调用层数太深,会存在堆栈溢出的风险,而迭代的形式相复杂,但效率较高,往往有这样的观点,等不用递归就不用递归,递归都可以用迭代来代替,从理论上讲,递归和迭代在时间复杂度方面是等价的,在不考虑函数调用开销和函数调用产生的堆栈开销情况下,但实际上,递归确实效率比替代低,迭代是利用变量的原值推算出变量的一个新值,他是从前向后归纳推演的过程,通过前面的过程函数不停的调用,后面的过程函数解决问题,而递归却是一个从后向前再向后的推演过程,给自己调用自己,既然这样递归没有任何优势,是不是就没有使用递归的必要了,那递归存在的意义是什么呢
从算法结构来说,递归声明的结构并不总能转化为迭代结构,原因在于结构的引申本身属于递归的概念,用迭代的方法,在设计初期,根本无法实现,因此,在结构设计时,通常采用递归的方式,而不是采用迭代的方式,一个极典型的例子就是链表使用递归定义,他极其简单,但是用非递归的方式去对其进行定义及调用处理,说明就比较困难,因为这些问题的底层数据结构本身就是递归,尤其是在遇到还链,图,网格等问题时,使用迭代的方式,从描述到实践上都会变得不现实。
例题小猴子摘桃
有一群猴子,去摘了一堆桃子商量之后决定每天吃剩余桃子的一半
当每天大家吃完桃子之后,有个贪心的小猴都会偷偷再吃一个桃子
按照这样的方式猴子们每天都快乐的吃着桃
直到第十天,当大家再想吃桃子时,发现只剩下一个桃子了
问:猴子们一共摘了多少桃子
斐波那契数列问题(用迭代的方法)
斐波那契数列是一组第一位和第二位为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;
}
迭代与递归的区别(斐波那契数列和小猴子摘桃)相关推荐
- 用递归法计算斐波那契数列的第n项
斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...
- 递归和循环:斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 解题思路 递推公式f(n)=f(n)= 当n=0=0,当n=0 当 ...
- python 递归方式实现斐波那契数列
python 递归方式实现斐波那契数列 import time t1=time.time() def factorial(n):if n==1 or n==2:return 1else:return ...
- python装饰器模式带参数_Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)...
Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...
- C语言递归算法求斐波那契,递归法求斐波那契数列(C语言版)
斐波那契数列: 又称黄金分割数列,指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 在数学上,斐波纳契数列以如下被以递归的方法定义 ...
- 递归与分治——斐波那契数列非递归,递归,与优化后的递归算法
斐波那契数列: 1.1.2.3.5.8.13.21.-- 简单说,就是前两项的和是第三项的值. 1.求第N个斐波那契数的值(非递归) //斐波那契数列 int fun(int n) {int a = ...
- 递归——阶乘加斐波那契数列(简单掌握递归思想的敲门砖)
话不多说,先上源码: 阶乘: #include<iostream> #include<bits/stdc++.h> using namespace std;int JieChe ...
- day16:递归思想——Fibonacci 斐波那契数列
一.斐波那契数列(Fibonacci sequence),又称黄金分割数列,这个数列最早是由印度数学家提出来的. 该序列的前几项是这样的:0,1,1,2,3,5,8,13,21,34,⋯ 在数学上,斐 ...
- Python之递归(含斐波那契数列和汉诺塔)
Python递归 一.什么是递归? 递归就是在调用一个函数的过程中,直接或者间接的调用函数自身这就叫递归. 二.实例 这里讲一下递归的注意点: (1)调用一次函数就会在内存里开辟栈帧空间,在调用结束后 ...
最新文章
- Java开源权限管理中间件
- 操作系统和常用软件下载
- BizTalk 开发系列(四十) BizTalk WCF-SQL Adapter读取SQL Service Broker消息
- App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
- Eclipse下创建Spring MVC web程序--非maven版
- STM8S——watchdog(IWDG)
- querydsl动态 sql_JPA整合Querydsl入门篇
- Symfony 上传图片教程
- java opencv 纠偏_一种基于OpenCV的高拍仪拍摄文档物体纠偏方法与流程
- 为什么买域名必须实名认证?这样做什么原因?
- 学计算机拼音不好怎么办,孩子拼音基础差怎么办?告诉你学拼音技巧!
- 生命的火花盛开与如幻如梦
- eureka 缺点
- 99行拓扑优化matlab程序解读,99行拓扑优化 代码解析
- python_习题一
- Android sim卡 pin码解锁流程.
- MATLAB几个误差参数说明
- 电路b-3—06刘晏辰
- 2021年度训练联盟热身训练赛第一场 A.Weird Flecks, But OK (最小覆盖圆)
- BILSTM原理介绍