您的位置首页  散文评论

4的阶乘(4的阶乘等于多少)干货满满

一来一去之间将问题分解步步为营,一一攻克之。

4的阶乘(4的阶乘等于多少)干货满满

 

递归算法:通过重复的单一解题过程调用自己来解决问题的一种算法通过上一篇的第一篇:认识计算机程序和算法 我们可以知道,各种算法都是一步一步演变过来的而递归算法也是比较接近我们的思想的,这一次我们来讲一下比较容易理解和入门的。

递归算法吧。

第二篇:递归算法1. 递归简介2. 递归算法框架模板2.1 二叉树遍历2.2 爬楼梯、跳台阶3. 递归演示代码4. 递归算法经典案例1. 递归简介递归算法可以分为递和归,递的意思是顺着次序一个接一个地,归的意思就是

返回的意思。由此我们可以得知去回之间问题迎刃而解。首先我们看看递归的数学表达式:

自然数n的阶乘写作n!1808年,基斯顿·卡曼引进这个表示法5!= 5 * 4 * 3 * 2 * 1 = 120上面的算法看不懂,那我们来看一下图吧:可以看到左边的是栈的形式,右边是树的形式(后期剪枝算法就是从二叉树重复计算的分支减去)。

上面的图是求5的阶乘算法图解,从图中我们可以看到左边的是递,右边的是归我们求5的阶乘等于5 * 4!,这里未知的就是4的阶乘,同样的道理4的阶乘等于4 * 3!,到这里我们又不知道3的阶乘是多少,于是又出现3的阶乘等于3 * 2!,2的阶乘我们如果不知道就往下走,。

2的阶乘等于 2 * 1!,这里我们知道1的阶乘就是1,这个时候我们就要一个一个的返回了一来一去之间将问题分解步步为营,一一攻克之2. 递归算法框架模板必须要有明确的终止返回值(比如我们都知道1的阶乘为1)。

可以构造重复逻辑调用自己,不断缩小至终止返回值(比如以此求得n-1的阶乘值)可以看到上面的条件必须满足第一条,不然就永远得不到结果2.1 二叉树遍历树的遍历常见的有:前序遍历:根、左、右中序遍历:左、根、右。

后序遍历:左、右、根可以看到以根为中序,前序就是根在前面,中序就是根在中间,后序是根在最后下面是二叉树的什么遍历?publicvoidtraverse(TreeNode root,List

> result){if(root ==null){return;}traverse(root.left, result); result.add(root.val);traverse(root

.right, result);}大家可以把方法traverse看成是一个整体,参数代表其作用,比如看成整个左子树等如果是作为List返回,就在方法里面new一个,可以把分支看成是一个list,最后合并即可。

注意一定要有一个空判断进行返回,因为子节点下面都是null大部分树的解题都可以用递归哟~2.2 爬楼梯、跳台阶// 这里我们将结果存入一个表里面staticint[] arr =newint[100];

publicintclimbStairs(int n){if(n==1){return1;}if(n==2){return2;}// 先去查表,如果有些值已经计算过了直接剪枝了!if(arr[n]>0)

{return arr[n];} arr[n]=climbStairs(n-1)+climbStairs(n-2);return arr[n];}3. 递归演示代码这里的代码都是以阶乘的算法来介绍的。

Java代码演示:publicclassRecursive{publicstaticvoidmain(String[] args){int result =recursive(5);System.out

.println("5的阶乘为:"+ result);createTreeTest();}privatestaticintrecursive(int num){// 必须要有一个返回if(num ==1

){return1;}// 逐步分解return num *recursive(num -1);}}Python代码演示:defrec(num):if num ==1:return1return num

* rec(num -1)print(rec(5))C代码演示:C是C语言的超集,所以很多语法很相似#includeusingnamespace std;intrec(int num

){if(num ==1){return1;}return num *rec(num -1);}intmain(int argc,char** argv){ cout <<"5!= "<

return0;}Typescript代码演示:functionrec(num){if(num ==1){return1;}return num *rec(num -1);}console.log(rec

(10));shell脚本演示:注意这里的return的范围是: 0~255 之间的整数,其中只有 0 表示成功所有这里会有问题,后期在研究为啥吧#!/bin/bashecho"请输入求阶乘的数:"read

numfunctionrec(){if[$1 -eq 1];thenresult=1elselettmp=$1-1 rec $tmplet"result=$1 * $?"fireturn

$result}rec $numecho"结果为:$?"Go语言演示:package mainfuncmain(){print(rec(5))}funcrec(num int)int{if num ==

1{return1}return num *rec(num-1)}4. 递归算法经典案例这里的案例只是提及名称和题目,后期会一一讲解阶乘汉诺塔杨辉三角斐波那契数列(兔子繁殖)LeetCode关于递归的题目:。

https://leetcode.cn/problemset/all/?page=1&topicSlugs=recursion通过上面的学习可以解决:144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历

226. 翻转二叉树70. 爬楼梯剑指 Offer 10- II. 青蛙跳台阶问题…

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186