哔哩哔哩数据结构讲解地址: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\n",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\n",search(78,arr,0,100)); printf("%d\n",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 \n"); return 0; } //答案是:O(1) 常数级别的都是 O(1) #include<stdio.h> void fun(int n) { for(int i=0;i<n;i++) printf("Hello World \n"); return 0; } //答案是:O(n) 与问题的规模n有关 n取多少就执行多少次 所以是 O(n) void function1(int n) { for(int i=1;i<n;i*=100) printf("Hello World \n"); 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)看递归调用的次数与问题的规模之间的关系