C++递归和迭代的区别,并举例说明[通俗易懂]

C++递归和迭代的区别,并举例说明[通俗易懂]递归:函数自己重复调用自己迭代:利用变量的原值推算出变量的一个新值;A不停的调用B例子一:斐波那契数递归(recursion):#include#includeusingnamespacestd;intfab(intn){if(n==0)return0;if(n==1)return1;if(n>1)returnfab(n-1)+fab(n-2);}intmain(){cout<<fab(4)<

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

递归:函数自己重复调用自己
迭代:利用变量的原值推算出变量的一个新值;A不停的调用B
例子一:斐波那契数
递归(recursion):

#include <iostream>
#include <vector>
using namespace std;
int fab(int n)
{ 
   
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    if (n > 1)
        return fab(n - 1) + fab(n - 2);
}
int main()
{ 
   
    cout << fab(4) << endl;
    return 0;
}

迭代(iteration):

#include <iostream>
#include <vector>
using namespace std;
int fab(int n)
{ 
   
    int a = 0, b = 1, c = 1;
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    while (n > 1)
    { 
   
        c = a + b;
        a = b;
        b = c;
        n--;
    }
    return c;
}
int main()
{ 
   
    cout << fab(4) << endl;
    return 0;
}

例子二:反转链表
递归(recursion):

#include <iostream>
#include <vector>
using namespace std;
struct ListNode
{ 
   
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) { 
   }
};
ListNode *reverseList(ListNode *head, ListNode *pre)
{ 
   
    if (!head)
        return NULL;
    if (!head->next)
    { 
   
        head->next = pre;
        return head;
    }
    ListNode *temp = head->next;
    head->next = pre;
    pre = head; //pre其实是往后移一个
    return reverseList(temp, pre);
}
ListNode *createNodeList(vector<int> &vec)
{ 
   
    ListNode *prev = new ListNode(vec[0]); //prev始终指向标尾指针
    ListNode *prevHead = prev;
    for (int i = 1; i < vec.size(); i++)
    { 
   
        ListNode *next_node = new ListNode(vec[i]);
        prev->next = next_node;
        prev = next_node;
    }
    return prevHead; //prevHead始终指向第一个元素
}
int main()
{ 
   
    vector<int> m = { 
   1, 2, 3, 4, 5};
    ListNode *l = createNodeList(m);
    ListNode *res_l = reverseList(l, NULL);
    for (auto p = res_l; p; p = p->next)
    { 
   
        cout << p->val << " ";
    }
    cout << endl;
    return 0;
}

迭代(iteration):

#include <iostream>
#include <vector>
using namespace std;
struct ListNode
{ 
   
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) { 
   }
};
ListNode *reverseList(ListNode *head)
{ 
   
    ListNode *cur = head, *pre = NULL;
    while (cur)
    { 
   
        ListNode *temp = cur->next;
        cur->next = pre;
        pre = cur;
        cur = temp;
    }
    return pre;
}
ListNode *createNodeList(vector<int> &vec)
{ 
   
    ListNode *prev = new ListNode(vec[0]); //prev始终指向标尾指针
    ListNode *prevHead = prev;
    for (int i = 1; i < vec.size(); i++)
    { 
   
        ListNode *next_node = new ListNode(vec[i]);
        prev->next = next_node;
        prev = next_node;
    }
    return prevHead; //prevHead始终指向第一个元素
}
int main()
{ 
   
    vector<int> m = { 
   1, 2, 3, 4, 5};
    ListNode *l = createNodeList(m);
    ListNode *res_l = reverseList(l);
    for (auto p = res_l; p; p = p->next)
    { 
   
        cout << p->val << " ";
    }
    cout << endl;
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • Redis 集群搭建

    Redis集群搭建前言最近通过看视频学习了一下Redis,前天使用CentOS7配置了一下Redis4.0.9单机版(相关链接:CentOS7配置Redis4.0.9),今天则通过之前的笔记,视频以及redis官网上集群搭建的教程(https://redis.io/topics/cluster-tutorial)的资料来搭建一下Redis集群。…

    2022年4月7日
    36
  • python安装第三方库的方法_ios常用的第三方库

    python安装第三方库的方法_ios常用的第三方库在pyhton的学习中,相信大家通常都会碰到第三方库的安装问题,这个问题对于很多初学者而言头疼不已。这里我做一些简单的总结,如何正确高效地安装第三方库,少走弯路(毕竟都是我亲自踩过的坑,所以特地来总结一下,方便以后回顾和总结)!

    2022年10月14日
    4
  • MySQL——MySQL 图形化管理工具的介绍

    MySQL——MySQL 图形化管理工具的介绍文章目录MySQL——MySQL图形化管理工具的介绍1、MySQLWorkbench2、Navicat3、SQLyog4、DBeaver5、DataGripMySQL——MySQL图形化管理工具的介绍MySQL图形化管理工具极大地方便了数据库的操作与管理,常用的图形化管理工具有:MysQLWorkbench、phpMyAdmin、NavicatPreminum、MySQLDumper、SQLyog、dbeaver、MysQLODBcConnector、DataGrip。1、MySQL

    2022年6月30日
    27
  • 北航计算机考研有多难_北京航空航天大学录取分数线2021

    北航计算机考研有多难_北京航空航天大学录取分数线2021文/最爱生活截止到现在,高考的志愿填报工作已经陆陆续续结束,各个高校也开始进行了录取工作。最近也有一部分省份开始公布了一些提前批次招录的投档分数线,同学们也将会陆陆续续的接受到自己理想中大学的录取通知书。目前,又有两个省份开始公布了本省份的提前批次投档分数线,分别是贵州省以及新疆维吾尔自治区。在这两个省份公布出提前批次的录取分数线之后,在网上也是一石激起千层浪,不少“惊喜”的事情也在发生,不少网友…

    2025年11月3日
    4
  • 阿里巴巴字体库_阿里免费45款字体

    阿里巴巴字体库_阿里免费45款字体阿里巴巴字体库https://www.iconfont.cn/

    2022年8月3日
    28
  • intellij idea2021激活码(JetBrains全家桶)[通俗易懂]

    (intellij idea2021激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlBCEBXQ3A4G-eyJsa…

    2022年3月22日
    71

发表回复

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

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