zoukankan      html  css  js  c++  java
  • 计算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;
    }


  • 相关阅读:
    跨媒体安全
    kali视频(21-25)学习
    kali视频(26-30)学习
    kali视频(16-20)学习
    kali视频学习(11-15)
    kali视频(1-5)
    使用Metaspoit攻击MS08-067
    web应用程序安全攻防---sql注入和xss跨站脚本攻击
    -区块链-
    TCP/IP网络协议攻击
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564963.html
Copyright © 2011-2022 走看看