递归

Python实现扑克24点小游戏 ,从此我就没输过

我与影子孤独终老i 提交于 2020-03-14 11:22:26
24点游戏玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24。 我们用Python来完成24点游戏的程序设计!!从此站在赌神巅峰 我在拉斯维加斯等你 PS注意:很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。为此小编建了个Python全栈免费答疑.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新Python实战教程免非下,,一起相互监督共同进步! 一、设计思路: 由于设计到了表达式,很自然的想到了是否可以使用表达式树来设计程序。本程序的确使用了表达式树,也是程序最关键的环节。简要概括为:先列出所有表达式的可能性,然后运用表达式树计算表达式的值。程序中大量的运用了递归,各个递归式不是很复杂,大家耐心看看,应该是能看懂的 表达式树: 表达式树的所有叶子节点均为操作数(operand),其他节点为运算符(operator)。由于本例中都是二元运算,所以表达式树是二叉树。下图就是一个表达式树 具体步骤: 1、遍历所有表达式的可能情况 遍历分为两部分,一部分遍历出操作数的所有可能,然后是运算符的所有可能。全排列的计算采用了递归的思想 2、根据传入的表达式的值,构造表达式树 由于表达式树的特点,所有操作数均为叶子节点,操作符为非叶子节点,而一个表达式(例如( ( ( 6 + 4 ) - 2 ) * 3

斐波那契(Fibonacci)数列

孤者浪人 提交于 2020-03-14 03:42:05
计算并返回斐波那契(Fibonacci)数列中第n项的值。 Code #include < iostream > using namespace std; int Fibonacci( int ); int Fib( int ); int main() { int n; cin >> n; cout << " 递归:Fibonacci数列的第 " << n << " 项是 " << Fib(n) << endl; cout << " 非递归:Fibonacci数列的第 " << n << " 项是 " << Fibonacci(n) << endl; return 0 ; } // 非递归 int Fibonacci( int n) { int fib1 = 1 ; int fib2 = 1 ; int fib3; if (n == 1 || n == 2 ) return 1 ; else { for ( int i = 3 ; i <= n; i ++ ) { fib3 = fib1 + fib2; fib1 = fib2; fib2 = fib3; } return fib3; } } // 递归 int Fib( int n) { int fib = 1 ; if (n == 1 || n == 2 ) fib = 1 ; else fib = Fib(n - 1 ) +

vue组件递归

不羁岁月 提交于 2020-03-14 01:45:52
刚才写了篇《 element多层导航菜单 》文章,顺便也写写其中核心原理 其实没啥好说就是组件递归,这里呢简单写个例子, 面试被问到的时候直接拿来手写代码也行, 有看到本文章的同学可以复制代码去试试 没多少代码量,主要是让还没懂组件递归的同学好理解 核心就这个,组件自己调用自己: // ====== 组件: ================== <template> <ul> <li v-for="(item,index) in list " :key="index"> <p>{{item.name}}</p> <treeMenus :list="item.children"></treeMenus> </li> </ul> </template> <script> export default { name: "treeMenus", props: { list: Array } }; </script> <style> ul { padding-left: 20px !important; } </style> // ====== 调用: ================== <!-- html调用 --> <treeMenus :list="treeMenusData"></treeMenus> treeMenusData: [ // 数据格式 { name: "菜单1",

Leetcode 斐波那契数列问题

亡梦爱人 提交于 2020-03-13 21:03:43
题目: 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 这道题我们可以用递归或者动态规划来完成。 递归思路——根据给出的斐波那契数列公式,将F(N)视为一个函数,函数求值的过程中不断调用自身。 动态规划——将公式中的F视为一个数组,F(N)即数组中下标为N的值。 递归解法: class Solution { /** * @param Integer $n * @return Integer */ function fib($n) { if($n<2){ return $n; }else{ return $this->fib($n-1)+$this->fib($n-2); } return $dp[$n]; } } 动态规划解法: class Solution { /** * @param Integer $n * @return Integer */ function fib($n) { // if($n<2){ // return $n; // } $dp = ['0'=>0,'1'=>'1']; for($i=2;$i<=$n;$i++

实现一个二叉搜索树(JavaScript 版)

こ雲淡風輕ζ 提交于 2020-03-13 17:21:37
二叉树在计算机科学中应用很广泛,学习它有助于让我们写出高效的插入、删除、搜索节点算法。二叉树的节点定义:一个节点最多只有两个节点,分别为左侧节点、右侧节点。 二叉搜索树是二叉树中的一种,在二叉搜索树中每个父节点的键值要大于左边子节点小于右边子节点。下图展示一颗二叉搜索树。 二叉搜索树实现大纲 本文将使用 JavaScript 语言,实现一个二叉搜索树,以下为实现的方法: constructor():构造函数,初始化一个二叉搜索树 insert(value):二叉树中查找一个节点,如果存在返回 true 否则返回 false preOrderTraverse(cb):先序遍历或称前序遍历 inOrderTraverse(cb):中序遍历 postOrderTraverse(cb):后序遍历 minNodeValue():最小节点值 maxNodeValue():最大节点值 removeNode(value):移除节点 destory():销毁节点 注意 :在实现二叉树搜索 在这里插入代码片 的很多方法中我们将使用大量的递归操作,如果对它不了解的,可以自行查阅资料学习。 初始化一个二叉搜索树 声明一个 BST 类,在构造函数的 constructor() 里声明它的结构: class BST { constructor () { this.root = null; // 初始化根节点

算法之生成评论树

徘徊边缘 提交于 2020-03-13 10:08:52
算法之生成评论树 本节内容 问题由来 递归实现 高效实现 总结 1. 问题由来 项目中用到了展示用户多级评论的功能,但是在数据库中存储的每行数据之前是通过parent_id来标示他们之间的关系。 从数据库中取出这一行行的数据,需要转换成类似于json数据格式的类型(其实就是通过parent_id将评论关联起来生成一颗一颗的评论树),再将数据传递给前端进行渲染。 [ {"id":"4","pid":"1","name":"大家电"}, {"id":"5","pid":"1","name":"生活电器"}, {"id":"1","pid":"0","name":"家用电器"}, {"id":"2","pid":"0","name":"服饰"}, {"id":"3","pid":"0","name":"化妆"}, {"id":"7","pid":"4","name":"空调"}, {"id":"8","pid":"4","name":"冰箱"}, {"id":"9","pid":"4","name":"洗衣机"}, {"id":"10","pid":"4","name":"热水器"}, {"id":"11","pid":"3","name":"面部护理"}, {"id":"12","pid":"3","name":"口腔护理"}, {"id":"13","pid":"2","name":

转:经典ACM算法

荒凉一梦 提交于 2020-03-13 07:15:47
实验一 统计数字问题 实验二 最大间隙问题 实验三 众数问题 实验四 半数集问题 实验五 集合划分问题 实验六 最少硬币问题 实验七 编辑距离问题 实验八 程序存储问题 实验九 最优服务次序问题 实验十 汽车加油问题 实验十一 工作分配问题 实验十二 0-1背包问题 实验十三 最小重量机器设计问题 实验十四 最小权顶点覆盖问题 实验十五 集合相等问题 实验十六 战车问题 实验一 统计数字问题 1、问题描述: 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。 2、题目分析: 考虑由0,1,2,…,9组成的所有n位数。从n个0到n个9共有个n位数,在这些n位数中,0,1,2,…,9每个数字使用次数相同,设为。 满足如下递归式: 由此可知,。 据此,可从低位向高位进行统计,再减去多余的0的个数即可。 3、算法设计: 定义数组a[10]存放0到9这10个数出现的次数,个位为第0位,第j位的数字为r。采用while循环从低位向高位统计: a. 统计从个位算起前j位0~9个数; b. 如果j+1位为0,去掉第j+1位补0个数; c. 统计第j+1位出现1~(r-1)个数; d.

递归--2的幂次方

淺唱寂寞╮ 提交于 2020-03-12 11:33:53
# include <cstdio> # include <iostream> # include <vector> # include <string> using namespace std ; string change ( int x ) { if ( x == 0 ) return "0" ; if ( x == 1 ) return "" ; vector < int > m ; while ( x != 0 ) { m . push_back ( x % 2 ) ; x / = 2 ; } string n = "" ; for ( int i = m . size ( ) - 1 ; i >= 0 ; i -- ) { if ( m [ i ] != 0 ) { if ( change ( i ) != "" ) n = n + "2(" + change ( i ) + ")+" ; else { n = n + "2+" ; } } } n . erase ( n . end ( ) - 1 ) ; return n ; } int main ( ) { int x ; while ( scanf ( "%d" , & x ) != EOF ) { cout << change ( x ) << endl ; } return 0 ; } 来源: CSDN 作者

Python 测验5: 函数和代码复用

拈花ヽ惹草 提交于 2020-03-12 08:44:40
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪以下关于模块化设计描述 错误 的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬ A模块间关系尽可能简单,模块之间耦合度低 B应尽可能合理划分功能块,功能块内部耦合度低 C高耦合度的特点是复用较为困难 D应尽可能合理划分功能块,功能块内部耦合度高 正确答案 B 模块内高耦合、模块间低耦合。 以下关于递归函数基例的说法 错误 的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬ A递归函数必须有基例 B递归函数的基例决定递归的深度 C递归函数的基例不再进行递归 D每个递归函数都只能有一个基例 正确答案 D 每个递归函数至少存在一个基例,但可能存在多个基例。 连续质数计算 描述 补充编程模板中代码,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬

Segment Tree Beats 学习笔记

99封情书 提交于 2020-03-12 05:24:24
例1 我们对一个区间 \([l,\ r]\) 维护它的最大值 \(mx\) ,以及 \(mx\) 的出现次数 \(cnt_mx\) ,和严格次大值 \(se\) 。并且维护区间和 \(sum\) 来计算答案。 对于 \(\forall\ l\ \leq\ i\ \leq\ r\ a_i\ =\ min(a_i,\ x)\) 操作时,如果 \(x\ \geq\ mx\) 则什么都不做,如果 \(x\ >\ se\) ,则修改 \(mx\) 和 \(sum\) 即可。否则递归下去。注意递归前要进行 push 操作,递归后要进行 pull 操作。 可以将每个节点的 \(mx\) 理解为对这个节点的子树内所有节点进行 \(min(a_i,\ mx)\) 的标记。复杂度 \(O(n\ log\ n)\) 。 代码 例2 由于对每个区间只有当 \(mx,\ mn\) 都存在时才能算贡献,不妨建两棵线段树。一棵线段树初始时 \(u_i\ =\ 0,\ d_i\ =\ 0\) ,另一棵 \(u_i\ =\ \infty,\ d_i\ =\ -\infty\) 。这样在一段区间可以算答案的时候暴力将第一棵树的对应节点赋值为第二棵线段树的对应节点。注意 pull 和 初始话 的时候 \(mx,\ mn,\ semx,\ semn\) 不能设为 \(0\) 而要设为 \(\infty,\ -\infty