递归与循环比较

下面通过几个例子,对递归与循环进行比较。

递归1

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;
void dfs(int n)
{
    if (n==0) return;
       cout<<n<<” “;
  dfs(n-1);
}
int main()
{
     dfs(10000);
    dfs(75000);//运行RE
}

  说明递归对内存有一定的消耗

对应的循环

1
2
3
4
5
6
7
8
9
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n
    for (int i=n;i>0;i--) cout<<i<<" ";
    return 0;
}

  输入

10000

75000均不会RE,因为不会产生内存消耗

 

递归2

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;
void dfs(int n)
{
    int a[10000]
     if (n==0) return;
     dfs(n-1);
}
int main()
{
    dfs(75);//运行RE
    dfs(50);
}

  说明递归对内存有一定的消耗,如果递归函数中有定义数组这种变量,内存消耗更大。对应循环

1
2
3
4
5
6
7
8
9
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n
    for (int i=n;i>0;i--){ int a[10000]; cout<<i<<" ";}
    return 0;
}

  输入

10000

75000均不会RE,因为不会产生内存消耗

递归3

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;
void dfs(int n)
{
    if (n==0) return;
    cout<<n<<" ";
    dfs(n-1);
    cout<<n<<" ";
}
int main()
{
    dfs(5);
}

  递归函数有递和归两个阶段

对应循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for (int i=n;i>0;i--) {
        cout<<i<<" ";
    }
    for (int i=1;i<=n0;i++) {
        cout<<i<<" ";
    }
    return 0;
}

  递归4

  

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
using namespace std;
void dfs(int n)
{
    if (n<=0) return;
    cout<<n<<" ";
    dfs(n-1);
    dfs(n-2);
}
int main()
{
    dfs(5);
}

  输出5 4 3 2 1 1 2 1 3 2 1 1

这个递归用简单循环就比较难实现了,从递归树上理解其运行情况

递归5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
void dfs(int n)
{
    if (n<=0) return;
    cout<<n<<" ";
    dfs(n-1);
    cout<<n<<" ";
    dfs(n-2);
    cout<<n<<" ";
}
int main()
{
    dfs(5);
}

  输出5 4 3 2 1 1 1 2 2 3 1 1 1 3 4 2 1 1 1 2 2 4 5 3 2 1 1 1 2 2 3 1 1 1 3 5

 递归6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
void dfs(int n)
{
    if (n<=0) return;
    cout<<n<<" ";
    dfs(n-1);
    cout<<n<<" ";
    dfs(n-2);
}
int main()
{
    dfs(5);
}

  输出5 4 3 2 1 1 2 3 1 1 4 2 1 1 2 5 3 2 1 1 2 3 1 1

从递归树分析一下

递归可以实现多重循环且嵌套层次不是固定的,循环结构的循环嵌套格式,嵌套层次是固定的

递归7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
void dfs(int n)
{
    if (n<=0) return;
    for (int i=1;i<=n;i++)
    {
        cout<<i<<" ";
    }
    cout<<endl;
    dfs(n-1);
}
int main()
{
    dfs(2);
}

  对应循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for (int i=n;i>0;i--) {
        for (int j=1;j<=i;j++)
        {
            cout<<j<<" ";
        }
        cout<<endl;
    }
    return 0;
}

  递归8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
void dfs(int n)
{
    if (n<=0) return;
    for (int i=1;i<=n;i++)
    {
        cout<<i<<" ";
        dfs(n-1);
    }
}
int main()
{
    dfs(3);
}

  输出1 1 1 2 1 2 1 1 2 1 3 1 1 2 1

递归9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream>
#include<vector>
using namespace std;
vector<int> p;
void dfs(int n)
{
    if (n<=0)
    {
        for (int j=0;j<p.size();j++)
        {
            cout<<p[j]<<" ";
        }
        cout<<endl;
        return;
    }
    for (int i=1;i<=n;i++)
    {
        p.push_back(i);
        dfs(n-1);
        p.pop_back();
    }
}
int main()
{
    dfs(3);
}

  递归10

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
#include<vector>
using namespace std;
vector<int> p;
int N;
void dfs(int n)
{
    if (n<=0)
    {
        for (int j=0;j<p.size();j++)
        {
            cout<<p[j]<<" ";
        }
        cout<<endl;
        return;
    }
    for (int i=1;i<=N;i++)
    {
        p.push_back(i);
        dfs(n-1);
        p.pop_back();
    }
}
int main()
{
    N=2;
    dfs(N);
}

  

posted @   心悟&&星际  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示