C++ 迭代与递归 浅析

【什么是递归】

递归即函数自身重复调用。

使用递归要注意的有两点:

1)递归就是在过程或函数里面调用自身;

2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口。

递归分为两个阶段:

1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;

2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解。

【什么是迭代】

利用变量的原值推算出变量的一个新值。如果递归是自己调用自己的话,迭代就是A不停的调用B。

【递归与迭代的区别】

递归及函数调用本身;迭代即循环,循环体中存在自变。

【代码解析】

//这是递归
int funcA(int n)
{
    if(n > 1)
       return n+funcA(n-1);
    else
       return 1;
}
//这是迭代
int funcB(int n)
{
    int i,s=0;
    for(i=1;i<n;i++)
       s+=i;
    return s;
}

这里递归,即funA自身调用;

这里的迭代,即funB不断的循环调用s,使得s自变;

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-12 01:53:33

C++ 迭代与递归 浅析的相关文章

Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列

什么是递归?简单的说就是:函数自身调用自身. "普通程序员用迭代,天才程序员用递归" 虽然递归 在运行时会不断出栈压栈,调用底层的寄存器,造成空间上的占用以及时间上的缓慢, 但在一些算法上面仍然是递归很实用 但需要注意的是: #递归是自己调用自己 很消耗时间,还会有消耗空间的危险,所以递归递归一定要知道"归去来兮" #所谓"归去来兮"就是指递归的两个原则: #1.调用了函数自身 #2.设置了自身正确的返回值 (必须有一个正确的返回停止条件,不能无

lua解上阶梯问题(按指定格式输出具体走法、迭代、递归)

问题描述 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序列出每一种走法. 思路 注释均在代码中 其它 第一次接触lua,很好的脚本语言 源代码 --[[-------------------------------------------------------------------------- 表复制:深复制 --]]-------------------------------------------------------------------------- func

迭代与递归

前些天,在看Moden C++ 时,突然想到迭代与递归是不是同一个东本,在我的脑子时原本是认为两者是一样,但在好奇的情况下baidu了下,发现两者是不一样的,刚好我有一个程序用的是递归,想着,有没有办法优化.所以就了解下. 以下是网上找的一些信息 递归函数在运行时将带来一部分运行时开销:参数必须压栈.为局部变量分配内存.寄存器的值必须保存等:当递归函数每次调用返回时,上述的操作都需要还原恢复成原来的样子.因此递归函数的效率并不会很高: 一个递归的函数往往可以改写成迭代的形式,而迭代比递归的效率要

迭代、递归替代循环

循环(迭代)与递归的区别 1. 递归算法与迭代算法的设计思路区别在于:函数或算法是否具备收敛性,当且仅当一个算法存在预期的收敛效果时,采用递归算法才是可行的,否则,就不能使用递归算法. 当然,从理论上说,所有的递归函数都可以转换为迭代函数,反之亦然,然而代价通常都是比较高的. 但从算法结构来说,递归声明的结构并不总能够转换为迭代结构,原因在于结构的引申本身属于递归的概念,用迭代的方法在设计初期根本无法实现,这就像动多态的东西并不总是可以用静多态的方法实现一样.这也是为什么在结构设计时,通常采用递

迭代与递归区别

实际上,迭代与递归都是属于循环的一种. 简单地说,递归是重复调用函数自身实现循环.迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值.从以下两组代码中可以看出迭代与递归的区别: 递归方法: int func(int n) { if(n > 1) return n+func(n-1); else return 1; } 迭代方法(注意与普通循环的区别): 1 int func(int n) 2 { 3 in

再谈循环&amp;迭代&amp;回溯&amp;递归&amp;递推这些基本概念

循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值出发反复进行某一运算得到所需结果.-----从已知到未知,从小到达(比如每年长高9cm,20年180,30后270) 回溯:递归时经历的一个过程. 递归:从所需结果出发不断回溯前一运算直到回到初值再递推得到所需结果----从未知到已知,从大到小,再从小到大(你想进bat,那么编程就的牛逼,就得卸载玩

三种常用算法概述——遍试、迭代、递归

算法: 为解决某类问题而设计的操作序列(非可执行的指令序列) 特点:有穷性.确定性.可行性.输入输出 1.遍试算法: 逻辑上:针对所有的可能的情况进行判断 形式上FOR中用IF 示例: 韩信点兵 <span style="white-space:pre"> </span>using System; class HanXin { static void Main() { for(int n=1;n<=105;n++) if(n%3==2 &&

PHP迭代与递归实现无限级分类

无限级分类是开发中常见的情况,因此本文对常见的无限极分类算法进行总结归纳. 1.循环迭代实现 1 $arr = [ 2 1=>['id'=>1,'name'=>'父1','father'=>NULL], 3 2=>['id'=>2,'name'=>'父2','father'=>NULL], 4 3=>['id'=>3,'name'=>'父3','father'=>NULL], 5 4=>['id'=>4,'name'=&g

LeetCode 206. Reverse Linked List(迭代和递归两种实现)

递归的代码比迭代的代码看起来更清爽一些,也是由于递归对行为进行了抽象吧. 注意到,这是一个尾递归函数.一些编译器会将它优化为迭代,这样一方面,在代码层面保持了清晰的逻辑和可读性.一方面保持了代码的性能. 代码: class Solution { public: ListNode* reverseList(ListNode* head) { // return iteratively(head); return recursively(nullptr, head); } private: List