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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • spring starter(怎么编写自己的starter)

    微服务架构从本质上说其实就是分布式架构,与其说是一种新架构,不如说是一种微服务架构风格。简单来说,微服务架构风格是要开发一种由多个小服务组成的应用。每个服务运行于独立的进程,并且采用轻量级交互。多数情况下是一个HTTP的资源API。这些服务具备独立业务能力并可以通过自动化部署方式独立部署。这种风格使最小化集中管理,从而可以使用多种不同的编程语言和数据存储技术。对于微服务架构系统,由于其服务粒度…

  • Hadoop与 Spark中的Shuffle之区别与联系

    Hadoop与 Spark中的Shuffle之区别与联系Hadoop与 Spark中的Shuffle之区别与联系

  • h5页面 请在微信客户端打开链接_如何看到“请在微信客户端打开链接”页面的源码?…

    h5页面 请在微信客户端打开链接_如何看到“请在微信客户端打开链接”页面的源码?…在H5学习的过程中,看一些好的H5是很有必要的。但是经常有一些H5打开以后在页面显示如下,阻碍了我们探索的脚步~这是因为H5的开发者调用了微信获取用户信息的权限,这个时候你在浏览器打开获取不到微信用户的信息,自然会出现这样的页面了。但是,如果你探索的欲望比较强,那么也是可以看到源码的~具体步骤如下:①安装微信web开发者工具②在手机端打开你要查看的页面,复制页面的链接③进入微信web开发者工具,选…

  • JS字符串分割截取

    JS字符串分割截取1.函数:split()功能:把一个字符串按指定的分隔符分割存储到数组中。例子:str=”2018.12″;arr=str.split(“.”);//arr是一个包含”2018″和”12″的数组,arr[0]是2018,arr[1]是12。2.函数:join()功能:使用分隔符将一个数组合并为一个字符串。例子:varString=myArray.joi…

  • 基于HTML5移动app开发教程一

    基于HTML5移动app开发教程一一摘要现在教大家创建第一个移动APP应用,在这里不需要大家对HTML相关知识特别熟练,只要大家能看懂html,js代码,就可以轻松创建一个基于HTML5webAPP应用.二整体效果三整个框架图四具体实现1.页面引导图第一步manifest.json参数设置如图:第二步在index.html(这个文件相当于iOS中的appdelegate.m)加上引导图代码第三步在mui.plu

  • java中scanner是什么意思_java中scanner是什么

    java中scanner是什么意思_java中scanner是什么java中的scanner是一个类,是用于扫描输入文本的新的实用程序;当在Eclipse中编写Java程序时,如果变量是需要手动输入的时候,此时就可以用到scanner类。java中的scanner是一个类,是用于扫描输入文本的新的实用程序。本篇文章将给大家详细介绍一下,感兴趣的朋友可以来了解一下。当我们在Eclipse中编写Java程序时,如果我们的变量是需要手动输入的时候,我们就可以用到sca…

发表回复

您的电子邮箱地址不会被公开。

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