zoukankan      html  css  js  c++  java
  • 数组求和:递归版、尾递归版、迭代版(C++语言实现)

    说明:以下代码仅大体表达核心思路,未对特殊情况进行判断和处理

    递归版实现:

    按照尾递归的定义,该实现不是尾递归版本,但在GCC编译器中使用-O1选项启用优化也可以获得类似尾递归优化的效果(Mac OS平台)。

    #include <iostream>
    
    using namespace std;
    
    long sum(int array[], unsigned length)
    {
        if (length < 1)
        {
            return 0;
        }
    
        return array[length - 1] + sum(array, length - 1);
    }
    
    int main()
    {
        int size = 190000, array[size];
        for (int i = 1; i <= size; ++i)
        {
            array[i - 1] = i;
        }
        cout << sum(array, size) << endl;
    }

    尾递归版实现:

    求和sum函数使用了重载,入口重载函数屏蔽了实际重载函数的参数细节,使得调用者只需要使用入口函数,并给入口函数数组及其长度即可。

    尾递归版本并不会解决栈溢出问题,需要进行优化后才不会出现栈溢出问题,因此需要在GCC编译器中使用-O1选项启用优化来编译解决。

    #include <iostream>
    
    using namespace std;
    
    //实际尾递归重载函数
    long sum(int array[], long result, unsigned length)
    {
        if (length > 0)
        {
            result += array[length - 1];
            return sum(array, result, length - 1);
        }
    
        return result;
    }
    
    //入口重载函数
    long sum(int array[], unsigned length)
    {
        return sum(array, 0, length);
    }
    
    int main()
    {
        //定义大小为1234567的数组
        int size = 1234567, array[size];
    
        //填充数组
        for (int i = 1; i <= size; ++i)
        {
            array[i - 1] = i;
        }
    
        //数组求和并输出
        cout << sum(array, size) << endl;
    }

    迭代版:

    #include <iostream>
    
    using namespace std;
    
    long sum(int array[], unsigned length)
    {
        long sum = 0;
        while (length > 0)
        {
            sum += array[--length];
        }
        return sum;
    }
    
    int main()
    {
        int size = 190000, array[size];
        for (int i = 1; i <= size; ++i)
        {
            array[i - 1] = i;
        }
        cout << sum(array, size) << endl;
    }
  • 相关阅读:
    C# 解决组合优化问题
    <@spring.message "index.title"/>
    服务容错处理库Polly使用
    Pycharm使用入门
    JS知识点
    design pattern
    java的NIO
    Promise
    Docker Compose + Spring Boot + Nginx + Mysql
    苹果开发者账号如何多人协作进行开发和真机调试XCode
  • 原文地址:https://www.cnblogs.com/pluse/p/13260183.html
Copyright © 2011-2022 走看看