• 计算x的n次方


    计算x的n次方有递归和递推程序。不论从时间或空间来看,自然递推优于递归。

    然而,二分法则是极其优的一种方法,用在计算x的n次方完全没有问题,而且不是递归而是递推的程序。

    程序中使用条件编译,以便于统计分析算法的计算量。

    正解是函数power3。

    /*
     *
     * 计算x的n次方程序:1.递归程序;2.非递归程序;3.二分法。
     *
     */
    
    #include <stdio.h>
    
    //#define DEBUG
    #ifdef DEBUG
    int c1=0, c2=0, c3=1;
    #endif
    
    long power1(int, int);
    long power2(int, int);
    long power3(int, int);
    
    int main(void)
    {
        int x = 2, n = 23;
        printf("power1: %d %d result=%ld
    ", x, n, power1(x, n));
        printf("power2: %d %d result=%ld
    ", x, n, power2(x, n));
        printf("power3: %d %d result=%ld
    ", x, n, power3(x, n));
    #ifdef DEBUG
        printf("c1=%d  c2=%d  c3=%d
    ", c1, c2, c3);
    #endif
    
        return 0;
    }
    
    long power1(int x, int n)
    {
    #ifdef DEBUG
        c1++;
    #endif
        return (n==1)?x:x * power1(x, n-1);
    }
    
    long power2(int x, int n)
    {
        int i;
        long result = 1;
    
        for(i=1; i<=n; i++)
        {
    #ifdef DEBUG
        c2++;
    #endif
            result *= x;
        }
    
        return result;
    }
    
    long power3(int x, int n)
    {
            long res = 1L;
            while(n) {
    #ifdef DEBUG
        c3++;
    #endif
                if(n & 1L)
                    res *= x;
                x *= x;
                n >>= 1;
            }
            return res;
    }


  • 相关阅读:
    linux 内核升级4.19
    监管对保险页面的要求
    软件测试-测试可交付成果
    软件测试架构思想
    dockerfile
    转载:.NET Core 图片操作在 Linux/Docker 下的坑
    docker build速度过慢问题
    .net 5 发布到 docker 或 docker 镜像方法
    Centos 安装 docker 教程
    DQL、DML、DDL、DCL全名是啥?
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564962.html
Copyright © 2020-2023  润新知