阶乘

递归

半城伤御伤魂 提交于 2019-12-03 10:03:46
一、递归   1、递归应用场景     递归的实际应用场景,迷宫问题(回溯),递归(Recursion)        2、递归的概念     简单的说: 递归就是方法自己调用自己 ,每次调用时 传入不同的变量 ,递归有助于编程者解决复杂的问题,同时,可以让代码更加简洁。   3、递归调用机制     递归调用机制,常见应用:     (1)打印问题 1 public static void test(int n) { 2 if (n > 2) { 3   test(n - 1); 4 } 5 System.out.println("n=" + n); 6 }     (2)阶乘问题 1 //阶乘 2 public static int factorial(int n) { 3 if (n == 1) { 4 return 1; 5 } else { 6 return factorial(n - 1) * n; // 1*2*3 7 } 8 } 9     图解:   4、递归能解决的问题     (1)各种数学问题如:八皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题     (2)各种算法中也会使用到递归,比如快速排序,归并排序,二分查找,分治算法等     (3)将用栈解决的问题—>递归代码比较简洁   5、递归需要遵守的重要规则     (1)执行一个方法时

汇编程序 - 2 (递归调用程序 -- 阶乘)

匿名 (未验证) 提交于 2019-12-02 23:48:02
这个也是学校的课设,处理的是 0--9 的阶乘。 设计思路: 总体设计思路和32位无符号数类似,结果存放在内存中;最主要的特点就是递归调用程序,即程序调用自己程序,最后通过比较一个界值来实现跳转。本设计的是0-9内的阶乘算法,有一个设计技巧:已知8!=40320(9D80H),9!=362880(58980H),由于进行乘法的16位运算MUL时,默认使用AX寄存器的值,乘积的结果放在DX:AX中。通过观察9!的16进制值知,在DX:AX中能放下。使用BX作为乘数源,从1往上递增。即当输入数据为9时,BX从1直到9完成递归调用。因为到8!时,AX中为9D80H,能够存放下,此时BX为9,运算后恰好能将值送到DX:AX中。如果从9递减到1的话,当BX为3时,运算结果(9X8X7X6X5X4X3=181440)对应16进制为2C4C0H,此时单用AX进行运算就会造成失真,如果要运算,需要先算DX的,再算AX的,没有必要。 输入:输入为0-9的字符。 运算(FAC):内部使用16进制进行运算。 调整(ADJUST):由于输出为10进制的运算后的数据,所以需要进行调整。内部实现是除10取余数,然后再入栈;除到最后时出栈,送到内存中去(只是为了内存首地址存储的是最高位,且按顺序存储)。 输出(OUTPUT):从内存中取出数据,调用21H的02H功能号,进行输出。 代码: //fac.asm

BZOJ 3990 排序

匿名 (未验证) 提交于 2019-12-02 23:47:01
题目描述 : 小A有一个 1~2 N 的排列A[1..2 N ],他希望将数组 A 从小到大排序。小 A 可以执行的操作有 N 种,每种操作最多可以执行一次。对于所有的 i(1<=i<=N) ,第 i 种操作为:将序列从左到右划分成 2 N-i+1 段,每段恰好包含2 i-1 个数,然后整体交换其中的两段。小A想知道可以将数组 A 从小到大排序的不同的操作序列有多少个。小 A 认为两个操作序列不同,当且仅当操作的个数不同,或者至少一个操作不同(种类不同或者操作的位置不同)。 下面是一个操作示例: N=3,初始排列 A[1..8] Ϊ [3,6,1,2,7,8,5,4] 。 第一次操作:执行第3种操作,交换 A[1..4] 和 A[5..8] ,交换后的 A[1..8] Ϊ [7,8,5,4,3,6,1,2] ; 第二次操作:执行用第1种操作,交换 A[3] 和 A[5] ,交换后的 A[1..8] Ϊ [7,8,3,4,5,6,1,2] ; 第三次操作:执行用第2种操作,交换 A[1..2] 和 A[7..8] ,交换后的 A[1..8] Ϊ [1,2,3,4,5,6,7,8] 。 第一行,一个整数N。 第二行,2 N 个整数,A[1]、 A[2] …A[2 N ]。 一行,一个整数,表示可以将数组A从小到大排序的不同的操作序列的个数。 3 7 8 5 6 1 2 4 3 6

面试题之:js 实现阶乘

拟墨画扇 提交于 2019-12-02 23:34:55
阶乘的公式是: n! = 1 * 2 * 3 * 4 * ... * (n-2) * (n-1) * n 输入一个 n, 实现阶乘 。代码如下: // 公共 html 部分 <p> 请输入: <input type="text" id="input" placeholder="请输入整数n" /> </p> <button onclick="set()">button</button> <div class="result"> 结果:<div id="result"></div> </div> 方法一:递归 function set(){ // 入口函数 let n = document.getElementById('input').value let res = this.math(n) // 结果 document.getElementById('result').innerText = res } function math(n){ // 递归函数 if(n < 0){ return -1 }else if(n === 0 || n === 1){ return 1 }else{ return n * this.math(n-1) } } 方法二: while() 来源: https://www.cnblogs.com/bala/p/11767371.html

python 求阶乘之和。求1+2!+3!+...+20!的和

匿名 (未验证) 提交于 2019-12-02 22:54:36
阶乘:也是数学里的一种术语;阶乘指从1乘以2乘以3乘以4一直乘到所要求的数;在表达阶乘时,就使用“!”来表示。如h阶乘,就表示为h!;阶乘一般很难计算,因为积都很大。 分析:1、阶乘的计算就是比较麻烦的一部分,用 递归函数 实现是比较好的方案,先定义一个递归函数实现求阶乘功能。 def recursion(n): #'定义递归函数实现求阶乘功能' if n==1: return 1 else: return n*recursion(n-1) 2、求和思路,(1)可以直接求和 。(2)也可以定义一个列表,将 for 遍历得到的阶乘结果追加到列表,然后使用sum()函数求和。 Sum=0 print("for循环直接调用递归函数求和".center(80,"*")) for i in range(1,21): Sum +=recursion(i) print(Sum) 列表求和方案: list=[] #定义一个空的列表,将调用递归函数生成的阶乘值追加到列表 print("将1-20的阶乘写入列表,使用sum函数求和".center(80,"*")) for i in range(1,21): list.append(recursion(i))# 将调用递归函数生成的阶乘值追加到列表 print(sum(list)) #列表求和 完整源代码以及结果: def recursion(n):

Python3 阶乘求和

匿名 (未验证) 提交于 2019-12-02 22:11:45
题目 求1+2!+3!+…+20!的和。 程序分析 1+2!+3!+…+20!=1+2(1+3(1+4(…20(1)))) res=1 for i in range(20,1,-1): res=i*res+1 print(res) 文章来源: https://blog.csdn.net/chexiansheng/article/details/89412531