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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 总结:关于留学网站使用laravel框架的总结

    总结:关于留学网站使用laravel框架的总结

    2021年10月20日
    44
  • DirectSound的应用

    DirectSound的应用

    2021年11月14日
    43
  • 权威外汇交易平台_国内外汇交易平台排行

    权威外汇交易平台_国内外汇交易平台排行Guardian是世界领先的在线金融商品交易平台,在华经营已超过10年,是专业外汇指数交易商。Guardian以优质的客户服务,技术支持以及同业最出色的交易系统使其成为客户理想的选择对象。Guardian服务对象包括金融机构客户,对冲基金,经理人账户和个人客户,多年来以卓越的信誉赢得了客户的满意。Guardian集团是专注于为全球客户提供包括外汇、贵金属、期权、指数、数字货币等交易产品,以及…

    2025年10月22日
    4
  • linux服务器配置jdk环境变量

    因为Java项目部署需要Java运行环境jdk,要在Linux服务器上部署Java项目,就必须线安装好jdk并配置好环境变量;本篇文章记录了如何安装jdk以及配置环境变量。1.下载jdk2.使用sftp工具将下载的jdk文件上传到Linux服务器上3.将jdk文件移动到/usr/local/java路径下mvjdk-8u171-linux-x64.tar.gz…

    2022年4月4日
    63
  • 嵌入式工程师有发展前途吗?[通俗易懂]

    嵌入式工程师有发展前途吗?[通俗易懂]嵌入式工程师有发展前途吗?现在来看,无论是软件开发还是嵌入式等,都是青春饭,但是软件(java,安卓,ios等应用层)的工资都稍高于嵌入式。但是嵌入式的门槛却非常高。是否应…显示全部​关注者1,379被浏览1,046,366已关注​写回答​邀请回答​好问题22​4条评论​分享​72个回答默认排序zhengzhimin设计师769人赞同了该回答一个在嵌入式行业工作快15年,在华为工作了6年的嵌入式工程师来谈谈看法。…

    2025年10月31日
    4
  • linux压缩文件夹,cksum比较两个文件或文件夹等是否一样

    linux压缩文件夹,cksum比较两个文件或文件夹等是否一样linux压缩文件夹,cksum比较两个文件或文件夹等是否一样

    2022年4月23日
    84

发表回复

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

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