zoukankan      html  css  js  c++  java
  • 第三章-递归和时间复杂度

    哔哩哔哩数据结构讲解地址:https://space.bilibili.com/356198029

    递归代码视频讲解地址:https://www.bilibili.com/video/av67746367

    #include<stdio.h>
    int fun(int n)
    {
        if(n<=1)
            return 1;
        else
            return n + fun(n-1);
    }
    int fun1(int n)
    {
        if(n<=1)
            return 1;
        else
            return n + fun1(n-1);
    }
    //双向递归
    int doublefun(int n)
    {
        if(n<=1)
            return 1;
        else
            return n + doublefun(n-1) +  doublefun(n-2);
    }
    //递归二分查找 递归简单运用
    int search(int n,int arr[],int min,int max)
    {
        printf("min=%d,max=%d
    ",min,max);
        if(min < max)
        {
            int mid = (min+max)/2;
            if(n == arr[mid])
                return mid;
            else if(n < arr[mid])
                return search(n,arr,min,mid-1);
            else if(n > arr[mid])
                return search(n,arr,mid+1,max);
        }
        else
            return -1;
    }
    
    int mian()
    {
        int arr[101];
        for(int i=0;i<100;i++) arr[i] = 2*i;
    
        printf("%d
    ",search(78,arr,0,100));
        printf("%d
    ",search(9,arr,0,100));//注意min,max为下标,即有多少个数字
        return 0;
    }

    哔哩哔哩数据结构讲解地址:https://space.bilibili.com/356198029

    递归代码视频讲解地址:https://www.bilibili.com/video/av66286422

    //注意 这个是无法运行的伪代码
    
    #include<stdio.h>
    int main()
    {
    
        for(int i=0;i<1000000;i++)
            printf("Hello World 
    ");
    
        return 0;
    }
    //答案是:O(1) 常数级别的都是 O(1)
    
    
    #include<stdio.h>
    void fun(int n)
    {
    
        for(int i=0;i<n;i++)
            printf("Hello World 
    ");
    
        return 0;
    }
    
    //答案是:O(n) 与问题的规模n有关 n取多少就执行多少次 所以是 O(n)
    
    
    void function1(int n)
    {
    
        for(int i=1;i<n;i*=100)
        printf("Hello World 
    ");
    
        return 0;
    }
    //答案是:O(logn) 与问题的规模n有关 对数级别的 无论底数是多少 都是 logn
    //        假设问题规模是10000 这个程序要执行2次 log100(N) = 2
    
    void function2(int n)
    {
    
        int s=0,i=0
        while(s<=n)
        {
            i++;
            s=s+i;
        }
        return 0;
    }
    //答案是:O(n) 与问题的规模n有关
    //        解题思路:
    //假设n=1000 那么程序要执行 45次左右
    //log2(1000)= 10 (约等于);
    //O(logn) < 该程序 < O(n)
    //所以是O(n)
    //有些同学说是O(根号N) 这个答案也对 只是更为精确
    
    int func(int n;)
    {
        if(n<=1)
        return 1;
        else
        return n + func(n-1);
    }
    //时间复杂度为O(N)看递归调用的次数与问题的规模之间的关系
  • 相关阅读:
    人脸识别常用数据集大全(12/20更新)
    103 保序回归 isotonic regression
    SVM的概率输出(Platt scaling)
    scikit_learn 中文说明入门
    外点惩处函数法·约束优化问题
    unigui 设置单元格颜色
    一些仪器的解码程序(delphi)
    phpstudy 配置 memcached / memcache
    OmniThreadLibrary学习笔记
    注意微信支付的配置
  • 原文地址:https://www.cnblogs.com/xwxz/p/11867581.html
Copyright © 2011-2022 走看看