递归

二分查找法的实现和应用汇总

醉酒当歌 提交于 2020-02-08 17:33:43
二分查找法的实现和应用汇总 关于二分查找法 二分查找法 主要是解决在“一堆数中找出指定的数 ”这类问题。 而想要应用二分查找法,这“一堆数”必须有一下特征: 存储在数组中 有序排列 所以如果是用 链表 存储的,就无法在其上应用 二分查找法 了。(曽在面试被问二分查找法可以什么数据结构上使用:数组?链表?) 至于是顺序递增排列还是递减排列,数组中是否存在相同的元素都不要紧。不过一般情况,我们还是希望并假设数组是递增排列,数组中的元素互不相同。 二分查找法的基本实现 二分查找法在算法家族大类中属于“ 分治法 ”,分治法基本都可以用 递归 来实现的,二分查找法的递归实现如下: int bsearch(int array[], int low, int high, int target){ if (low > high) return -1; int mid = (low + high)/2; if (array[mid]> target) return binarysearch(array, low, mid -1, target); if (array[mid]< target) return binarysearch(array, mid+1, high, target); //if (midValue == target) return mid;}

Javascript学习笔记:JS错误处理

*爱你&永不变心* 提交于 2020-02-08 17:29:47
1.语法错误 不符合js语法的错误。 2.运行时错误 运行时错误(Runtime Error)值代码没有无法错误,而在运行时才发生的错误。 ReferenceError ,变量引用异常。 TypeError ,类型使用错误。 RangeError ,一般在递归爆栈时触发,即递归深度太深。 3.逻辑错误 逻辑错误一般指的是结果与预期不符。 debugger使用 在代码段中加入 debugger; 语句,可以使程序在运行时在debugger处暂停运行。此后可以使用浏览器的单步调试工具进行调试。也可以使用断点。 4.主动触发错误:throw/try catch function multiple ( a , b ) { if ( typeof a != 'number' || typeof b != 'number' ) { throw new Error ( '参数必须是数字!' ) ; } return a * b ; } try { c = multiple ( 'a' , 'b' ) ; alert ( c ) ; } catch ( e ) { alert ( "必须是两个数字" ) ; } 来源: CSDN 作者: Zijeak 链接: https://blog.csdn.net/qq_18404993/article/details/104222683

Java-方法的使用-递归求解汉诺塔问题

北战南征 提交于 2020-02-08 17:09:47
递归求解汉诺塔问题 ​ 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。 并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。 问应该如何操作? 对问题的分析: 将n个盘子从A座上移到C座上可分解为以下三个步骤: (1)将A上的n-1个盘子借助C先移到B上; 递归方法分解为: · 将A上1个盘子从A移到C; · 将A上1个盘子从A移到B; · 将C上1个盘子从C移到B; (2)将A座上剩下的一个盘移到C座上; (3)将n-1个盘从B座借助于A座移到C座上; 递归方法分解为: · 将B上1个盘子从B移到A; · 将B上1个盘子从B移到C; · 将A上1个盘子从A移到C; 其中步骤(1)和步骤(3)都是将n-1个盘从一个座移到另一个座上,采取的办法一样,只是座的名字不同。为了使之一般化,可以将步骤(1)和步骤(2)表示为: 将“one”座上的n-1个盘移到“two”座(借助“three”座) 在步骤(1)中: one对应A,two对应B,three对应C 在步骤(3)中: one对应B,two对应C,three对应A 所以

高阶函数,递归函数,内置函数

本秂侑毒 提交于 2020-02-08 14:01:19
1、高阶函数 高阶函数就是函数中间有函数,f没有加括号的相当于没有执行的门牌号,f()加上括号之后代表执行 2、 3、递归函数--阶乘--使用递归函数会降低一般程序的速度 迭代器阶乘 使用递归函数,就是迭代法嘛 4、只有模块,类及函数才能引用新的作用域 5、filter---还不是很理解怎么使用,感觉多此一举 6、map----感觉就像是两个东西拼接起来 7、reduce 来源: https://www.cnblogs.com/hanjie955/p/12283126.html

python 递归遍历目录

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-08 12:34:16
import osdef getAllDirRE(path, sp = ""): #得到当前目录下所有的文件 filesList = os.listdir(path) #处理每一个文件 sp += " " for fileName in filesList: #判断是否是路径(用绝对路径) fileAbsPath = os.path.join(path, fileName) if os.path.isdir(fileAbsPath): print(sp + "目录:", fileName) #递归调用 getAllDir(fileAbsPath, sp) else: print(sp + "普通文件:", fileName) getAllDirRE("D:\python") 来源: https://www.cnblogs.com/pygo/p/12275856.html

全排列的递归算法

老子叫甜甜 提交于 2020-02-08 07:55:26
递归思想来进行全排列是最接近人的思维的,例如对a, b , c,进行全排列第一轮是a**,b**,c**,第二轮是ab*,b a*, c b*,就是轮番把一个数固定在首位,然后剩下几位进行枚举; 代码: #include using namespace std; int total = 0; //交换函数 void swapArray(int &a,int &b) { int temp; temp = a; a = b; b = temp; } //递归函数 void fullPermutation(int * fullArray,int start,int endn,int number){ //这里,既可以是">=",也可以是">",,应该也可以是"==" if(start>=endn){ for(int i=0;i cout<<fullArray[i]; } cout<<endl; total++; } else{ for(int i=start;i<=endn;i++){ swapArray(fullArray[start],fullArray[i]);//交换 fullPermutation(fullArray,start+1,endn,number); swapArray(fullArray[start],fullArray[i]);//注意恢复原样 } } } int

全排列的递归算法

不羁的心 提交于 2020-02-08 07:53:41
递归思想来进行全排列是最接近人的思维的,例如对a, b , c,进行全排列第一轮是a**,b**,c**,第二轮是ab*,b a*, c b*,就是轮番把一个数固定在首位,然后剩下几位进行枚举; 代码: #include using namespace std; int total = 0; //交换函数 void swapArray(int &a,int &b) { int temp; temp = a; a = b; b = temp; } //递归函数 void fullPermutation(int * fullArray,int start,int endn,int number){ //这里,既可以是">=",也可以是">",,应该也可以是"==" if(start>=endn){ for(int i=0;i cout<<fullArray[i]; } cout<<endl; total++; } else{ for(int i=start;i<=endn;i++){ swapArray(fullArray[start],fullArray[i]);//交换 fullPermutation(fullArray,start+1,endn,number); swapArray(fullArray[start],fullArray[i]);//注意恢复原样 } } } int

递归实现全排列

时间秒杀一切 提交于 2020-02-08 04:46:39
递归的原理和实现方法是很基础的就不再说明了。 直接上题 # include <cstdio> const int maxn = 11 ; //P记录当前排列,hash记录x是否在P中 int n , P [ maxn ] , hashTable [ maxn ] = { false } ; //当前处理排列的第index位 void Func ( int index ) { if ( index == n + 1 ) { //递归边界 for ( int i = 1 ; i <= n ; i ++ ) { printf ( "%d" , P [ i ] ) ; } printf ( "\n" ) ; return ; } for ( int x = 1 ; x <= n ; x ++ ) { if ( hashTable [ x ] == false ) { P [ index ] = x ; hashTable [ x ] = true ; Func ( index + 1 ) ; hashTable [ x ] = false ; // } } } int main ( ) { n = 3 ; Func ( 1 ) ; return 0 ; } 应该可以看懂。。。 来源: CSDN 作者: 拾贝的小学生 链接: https://blog.csdn.net

使用递归函数计算1到n之和

只谈情不闲聊 提交于 2020-02-08 01:28:43
本题要求实现一个用递归计算1+2+3+…+n的和的简单函数。 函数接口定义: int sum( int n ); 该函数对于传入的正整数n返回1+2+3+…+n的和;若n不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数。 裁判测试程序样例: #include <stdio.h> int sum( int n ); int main() { int n; scanf("%d", &n); printf ("%d\n", sum(n)); return 0; } /* 你的代码将被嵌在这里 */ 输入样例1: 10 输出样例1: 55 输入样例2: 0 输出样例2: 0 int sum( int n ) { int i,sum=0; for(i=1;i<=n;i++) { sum+=i; } return sum; } 来源: CSDN 作者: Noria 107 链接: https://blog.csdn.net/Noria107/article/details/104212870

树的遍历

本秂侑毒 提交于 2020-02-08 01:03:36
//二叉树的创建,递归遍历,非递归遍历,拷贝,深度 #include<iostream> #include<stack> using namespace std ; //二叉树的结构 typedef struct BiTNode { char data ; //数据域 struct BiTNode *lchild = nullptr ; //指针必须初始化,c11标准 struct BiTNode *rchild = nullptr ; //左右孩子 } BiTNode,*BiTree ; //二叉树的结构 //二叉树的创建 void CreateBiTree ( BiTree & T ) //先序输入 { char ch ; cin >> ch ; if ( ch == '#' ) T = NULL ; else { T = new BiTNode ; //分配空间 T- > data = ch ; //根节点赋值 CreateBiTree ( T- > lchild ) ; //建立左子树 CreateBiTree ( T- > rchild ) ; //建立右子树 } } //二叉树的创建 //先序遍历 void PreTraverse ( BiTree T ) { if ( T ) { cout << T- > data ; PreTraverse ( T- >