递归

递归总结

怎甘沉沦 提交于 2020-03-03 07:03:44
典型递归例题 斐波那契数列 int ff ( int k ) { if ( k == 1 || k == 2 ) return 1 ; else return ff ( k - 1 ) + ff ( k - 2 ) ; } 最大公约数 int gcd ( int x , int y ) { if ( y == 0 ) return x ; else return gcd ( y , x % y ) ; } Pell数列 long long w [ 1000010 ] ; //存储数组 long long ff ( int x ) { if ( w [ x ] ) return w [ x ] ; //计算过的进行存储 else if ( x == 1 ) return 1 ; else if ( x == 2 ) return 2 ; else { w [ x ] = ( 2 * ff ( x - 1 ) % 32767 + ff ( x - 2 ) % 32767 ) % 32767 ; return w [ x ] ; } } 来源: CSDN 作者: 不做神。 链接: https://blog.csdn.net/gny1106/article/details/104619709

Python之递归

北城以北 提交于 2020-03-03 05:28:15
python之递归 递归的特征:有调用自身函数的行为 2.有正确的返回条件(不能写成死循环了) 1. 汉诺塔 def hanoi ( n , x , y , z ) : #n代表盘子的层数(个数),x代表盘子的初始位置,y代表盘子中间缓存的位置,z代表盘子的目的位置,这三个位置一定要搞清楚!!! if n == 1 : print ( x , "-->" , z ) else : hanoi ( n - 1 , x , z , y ) #先将n-1个盘子放到Y上去() print ( x , "-->" , z ) #再将第n个盘子(最底下的盘子)从X放入到Z上面去 hanoi ( n - 1 , y , x , z ) #最后把在Y上面的n-1个盘子放到Z上面去 hanoi ( 3 , "a" , "b" , "c" ) 2. 求阶乘 ``python def factorial ( n ) : if n == 1 : return 1 else : return n * factorial ( n - 1 ) num = input ( "请输入一个整数,以便求其阶乘:" ) num = int ( num ) print ( "%d 的阶乘是 %d" % ( num , factor ( num ) ) ) 3.一块长方形能被切割成完全一样的正方形的边长是多少?

算法--递归(6)

旧城冷巷雨未停 提交于 2020-03-03 05:02:53
求n个元素的全排列 理解: n=1 v.pushback(a[n]) print v return for i = 1 to n v.pushback(a[n]) fullArray(v,n-1) v.pop_back() print endl # include <iostream> # include <vector> using namespace std ; void fullArray ( vector < int > & v , int n , vector < int > v0 , int & total ) { if ( n == 0 ) { v . push_back ( v0 [ n ] ) ; size_t size = v . size ( ) ; for ( int i = 0 ; i < size ; ++ i ) { cout << v [ i ] << ends ; } total + = 1 ; cout << endl ; v . pop_back ( ) ; return ; } for ( auto it = v0 . begin ( ) ; it != v0 . end ( ) ; it ++ ) { int temp = it - v0 . begin ( ) ; int temp0 = * it ; v . push_back ( *

PYTHON数据结构与算法学习笔记(六)

[亡魂溺海] 提交于 2020-03-03 02:52:56
目录 树与树算法 树的概念 树的存储与表示 二叉树 二叉树的性质 二叉树的创建 二叉树的遍历 广度优先遍历(层次遍历) 深度优先遍历 树与树算法 树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 1、每个节点有零个或多个子节点; 2、没有父节点的节点称为根节点; 3、每一个非根节点有且只有一个父节点; 4、除了根节点外,每个子节点可以分为多个不相交的子树。 例 : 树的术语 1、 节点的度 :一个节点含有的子树的个数称为该节点的度; 2、 树的度 :一棵树中,最大的节点的度称为树的度; 3、 叶节点或终端节点 :度为零的节点; 4、 父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 5、 子节点 :一个节点含有的子树的根节点称为该节点的子节点; 6、 兄弟节点 :具有相同父节点的节点互称为兄弟节点; 7、 节点的层次 :从根开始定义起,根为第1层,根的子节点为第2层,以此类推; 8、 树的高度或深度 :树中节点的最大层次; 9、 堂兄弟节点 :父节点在同一层的节点互为堂兄弟; 10、 节点的祖先 :从根到该节点所经分支上的所有节点;

DNS递归与迭代

Deadly 提交于 2020-03-02 22:30:46
客户机向本地DNS服务器发送请求,等待肯定或者否定回复的过程为递归过程 迭代是本地服务器向根 DNS服务器 发出请求,而根 DNS服务器 只是给出下一级DNS服务器的地址,然后本地DNS服务器再向下一级DNS发送查询请求直至得到最终答案。 DNS解析过程:host文件-本地DNS-根域名服务器-顶级域名服务器-二级域名服务器-...... 来源: CSDN 作者: wj2555111 链接: https://blog.csdn.net/wj2555111/article/details/104617060

递归实验的三个作业实验(阶乘,杨辉三角,汉诺塔,回文)

Deadly 提交于 2020-03-02 21:16:17
部分一 使用计算机计算组合数: (1 )使用组合数公式利用n! 来计算 (2 )使用递推的方法用杨辉三角形计算 (3 )使用递归的方法用组合数递推公式计算 设计思路:用递归解决n!问题,然后将上述公式解决。f(n)=n*f(n-1); 程序流程图: 运行结果截图: 程序源代码: 第一个: package digui0101; import java.util.Scanner; public class AAA { public static void main(String[] args) { int k,n,a,s,d,f; Scanner input = new Scanner(System. in ); System. out .println("请输入k,n"); k=input.nextInt(); n=input.nextInt(); if (k>n) { System. out .println("错误"); System. exit (0); } a= jiecheng (n); s= jiecheng (k); d= jiecheng (n-k); f=a/(s*d); System. out .println(f); } public static int jiecheng( int x) { int a; if (x==1)a=1; else a=x*

二叉树的遍历问题

非 Y 不嫁゛ 提交于 2020-03-02 01:02:36
二叉树的定义是用递归定义的,这样我们会发现在它在前中后遍历、甚至插入、建立程序中常常用到递归,实际上把握好了递归,也就把握好了二叉树的遍历问题。 下面是一些问题练习 1.从一个遍历(明确空树)中确定树 时间限制: 1 Sec 内存限制: 32 MB 提交: 312 解决: 186 [提交][状态][讨论版][命题人:外部导入] 题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。 输入 输入包括1行字符串,长度不超过100。 输出 可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。 样例输入 a#b#cdef##### a## 样例输出 a b f e d c a 分析: 这个问题其实简单,题目是给出了前序遍历的输入,如果我们也跟着前序遍历,过程中再建立树,题目就可解了,不过得注意边界条件发生了变化。 # include <iostream> # include <string> using namespace std ; string s ; int i , n ; //用来记录字符串位置和大小

JavaScript算法--递归!

*爱你&永不变心* 提交于 2020-03-01 21:54:23
今天给大家讲讲递归 递归其实很好理解 举个例子 比如 借钱 你第一天借了 100块 之后每隔一天你就要多还50元 如果你一直不还 这将是个死循环递归 用代码展示如下 // 简单递归 n代表你第几天还钱 function money(n){ if(n<=1){ return 100; } return 50+money(n-1); } 其中 return money(),就是不断直接的调用自身函数返回的值 直到n<=1的时候 递归返回最终结果 递归就是一个间接或直接的调用自身的函数; 其中return 最为关键 没有返回的值,则无法实现递归 输出则是undefind 来源: CSDN 作者: xbyysj 链接: https://blog.csdn.net/xbyysj/article/details/104599311

递归调用的事列,深拷贝对象

不打扰是莪最后的温柔 提交于 2020-03-01 21:03:33
对象的深拷贝也使用到了递归调用,判断是否为多层对象,复制多级数据结构 function deepClone(obj) { // 判断是不是对象 function isObject(o) { return (typeof o === 'object' || typeof o === 'function') && o !== null } // 不是对象的话报错 if (!isObject(obj)) { throw new Error('非对象') } let isArray = Array.isArray(obj) let newObj = isArray ? [...obj] : { ...obj } // 是数组的话 用数组的解构来实现对象的复制,对象也同理 // 静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组 Reflect.ownKeys(newObj).forEach(key => { newObj[key] = isObject(obj[key]) ? deepClone(obj[key]) : obj[key] // 这里进行递归实现多层对象的复制 }) return newObj } 递归函数必须要有结束递归的条件,不然会形成死循环。 来源: CSDN 作者: 梦幻影巧巧23 链接: https://blog.csdn.net

递归算法的一般思路总结

跟風遠走 提交于 2020-03-01 21:01:13
** 递归算法 ** 程序直接或间接的调用自身的编程技巧称为递归算法,直接或间接调用自身的函数称为递归函数;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 递归问题基本思想:问题层层分析 关键:找出递归定义和递归终止条件 递归定义:使问题向边界条件转化的规则 递归终止条件:所描述问题的最简单的情况,它本身不再使用递归的定义 例: 求1~100的和 递归 fn(n)=n+fn(n-1) 终止条件:fn(1)=1 代码: function fn(n) { If(n<=1) Return 1; Else return n+fn(n-1); } 例: 求最大公因式 (欧几里得算法) 递归: gcd(m,n)=gcd(n,m%n) 终止条件:gcd(m,0)=m 代码: gcd(m,n)//m>n { If(n==0) return(m); else return gcd(n,m m%n); } 例题 求逆波兰表达式 比如说:(2+3) 4 -> * + 2 3 4 比如说 * + 11 12 + 24 35 -> (24+ 35) (11 + 12) = 1357 atof 函数能把char型转换成浮点数 atof():double atof(const char *str ) 思路: 向字符串数组输入,分两种情况,1,是符号,2,是数字