Java递归简单实现n的阶乘
目录
- 1.递归的基本概念
- 2.递归的重要规则
- 3.利用递归实现n的阶乘
1.递归的基本概念
在说什么是递归之前,我想大家定见过这个表情包吧
什么是递归:
程序调用自身的编程技巧称为递归( recursion
)递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归的用途:
递归可用于解决各种数学问题:八皇后问题、汉诺塔问题、阶乘问题、迷宫问题等
递归也可用于各种算法:快排、归并排序、二分查找、分治算法等
2.递归的重要规则
- 执行一个方法就创建一个新的受保护的独立栈空间
- 方法的局部变量是独立的
- 如果方法使用的是引用数据类型的变量那么就共享引用类型的数据
- 递归必须向退出递归的条件逼近
- 当一个方法执行完毕或者遇到return就会返回,遵守谁调用就将结果返回给谁
3.利用递归实现n的阶乘
代码实现:
public class RecursionTest { public static void main(String[] args) { int x = factorial(4); System.out.println(x); //输出结果24 } public static int factorial(int n){ //负数没有阶乘,如果参数是负数就抛出异常 if (n<0){ throw new RuntimeException("负数没有阶乘"); } //0和1的阶乘都是1 if (n == 1||n ==0){ return 1; }else { //如果参数不是负数且大于1就递归调用factorial方法 int m = factorial(n - 1)*n; return m; } } }
到此这篇关于Java递归简单实现n的阶乘的文章就介绍到这了,更多相关Java递归内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
Java实现递归计算n的阶乘
本文实例为大家分享了Java实现递归计算n的阶乘的具体代码,供大家参考,具体内容如下 问题描述 利用递归的思想实现阶乘的计算,以 n!为例 (一).n的范围 1.n<0:n!无意义 2.n=0或n=1:n!=1 3.n>2:n!=n(n-1)! 关于 0!=1 的一个合理性解释: 根据阶乘的定义n!=n(n-1)!, 可变形为n=(n+1)!/(n+1), 带入有0=1!/1=1 (二).问题分析 1.n<0时提醒用户输入有误 (1)在未知循环次数时,可以采用while语句来提醒 (2)
-
Java递归简单实现n的阶乘
目录 1.递归的基本概念 2.递归的重要规则 3.利用递归实现n的阶乘 1.递归的基本概念 在说什么是递归之前,我想大家定见过这个表情包吧 什么是递归: 程序调用自身的编程技巧称为递归( recursion)递归的能力在于用有限的语句来定义对象的无限集合.一般来说,递归需要有边界条件.递归前进段和递归返回段.当边界条件不满足时,递归前进:当边界条件满足时,递归返回. 递归的用途: 递归可用于解决各种数学问题:八皇后问题.汉诺塔问题.阶乘问题.迷宫问题等 递归也可用于各种算法:快排.归并排序.二分
-
Java实现简单的递归操作方法实例
前言 在数据结构算法设计中,或者一个方法的具体实现的时候,有一种方法叫做"递归",这种方法在思想上并不是特别难,但是实现起来还是有一些需要注意的.虽然对于很多递归算法都可以由相应的循环迭代来代替,但是对于一些比较抽象复杂的算法不用递归很难理解与实现. 递归分为直接递归和间接递归,就简单分享一下两个小的直接递归. 对于递归的概念,其实你可以简单的理解为自己定义自己,记得小时候看过一部电视剧<狼毒花>,里面主角叫做"常发",但是个文盲,老师问他叫什么,他说&
-
java 递归深入理解
一.递归函数,通俗的说就是函数本身自己调用自己... 如:n!=n(n-1)! 你定义函数f(n)=nf(n-1) 而f(n-1)又是这个定义的函数..这就是递归 二.为什么要用递归:递归的目的是简化程序设计,使程序易读 三.递归的弊端:虽然非递归函数效率高,但较难编程,可读性较差.递归函数的缺点是增加了系统开销,也就是说,每递归一次,栈内存就多占用一截 四.递归的条件:需有完成任务的语句,需满足递归的要求(减小而不是发散) 五.递归进阶: 1.用递归算n的阶乘: 分析:n!=n*(n-1)*(
-
Java实现简单文件过滤器功能
代码思路: 想要循环遍历文件夹下所有子文件夹,就要用到递归. 首先判断路径是否存在: 是:获取文件 判断是否文件夹: 是:调用自身,继续获取子文件夹下内容 否:判断文件后缀,符合则输出 否:输出提示 package com.hanqi.maya.util; import java.io.File; import java.util.Scanner; public class TestGuolv { public static void main(String[] args) { Scanner
-
Java递归运行的机制:递归的微观解读图文分析
本文讲述了Java递归运行的机制:递归的微观解.分享给大家供大家参考,具体如下: 前言:在java递归基础与递归的宏观语意和java链表的天然递归结构性质中我们分别通过数组以及链表对递归进行了应用,那时我们只是对递归进行了宏观理解--递归是将问题化为更小问题的子过程.这一节我们对在4.1节中递归在数组中的应用和4.2节中递归在链表中的应用进行微观解读: 一.关于4.1节中递归在数组中的应用 1) 我们先来看看4.1节中的代码实现,如下图: 为了更好的进行分析,我们将上述代码的最后一句进行拆分,拆
-
如何利用Java递归解决“九连环”公式
在之前有写到过一点点有关递归的东西点击打开链接,然后想到小时候自己玩的一个玩具--九连环.小时候自己曾经一边玩一边用笔记下来解开这个东西的公式,那是十几年前的事情了.前两天突然想起来,九连环的基本操作就是一个递归,一个感觉起来非常标准的递归过程. 九连环的玩法规则用一句话来概括就是:如果你想要卸掉某一环或者装上某一环,只需要保留这一环前面一环,再之前所有的环都卸掉.(例如你想要卸掉或者装上第9环,那么保留第8环,第8环之前的所有的环都卸掉)其中第一环可以直接卸掉.(其实第一第二这两环可以一起装上
-
java递归实现拼装多个api的结果操作方法
工作需要,经常需要实现api接口,但每次都是大同小异,我就考虑是否可以将这种重复性的工作配置化. 我就写一个模板api,然后所有的HTTP请求过来,根据不同的配置返回不同结果. 最开始考虑的是比较简单的,来一个api需求,我就去MySQL查一条这个api对应的SQL,然后拿SQL去取结果,返回. 这个不难. 关键是实际需求中,有很多api返回的数据很复杂,比如渲染地图的接口,一般一条SQL搞不定. 那我就想,那我能不能实现api的拼装呢,你看到我只是调用了一个API,但是我给你返回的结果,其实是
-
Java 递归重难点分析详解与练习
目录 递归是什么 分析递归的过程 递归练习 按顺序打印一个数的每一位 递归是什么 就是一个方法在执行的时候,自己调用自己. 递归的要求: 1 有一个趋近于终止的条件 2 实现递归要去推导出一个递推公式 递归就是递下去,归上来.求 5 的阶乘,代码举例: public static int fact(int n){ if(n == 1){ return n; } return n*fact(n - 1); } public static void main(String[] args) { int
-
Java实现简单扫雷程序
用Java实现简单扫雷程序,供大家参考,具体内容如下 页面设置:框架是borderlayout,在上中下加入外面要加入的组件(左边和右边不加).扫雷用的布局是gridlayout即网格布局,与扫雷界面天然契合. 组件:使用panel,button,frame,label等组件,最后集中到frame中形成整体.并对其加入适当的监听,监听算法的实现如下. 扫雷算法:一共要考虑三种情况,第一种是点到雷的情况,第二种是点到空的格的情况,第三种是点到有数字的情况.下面我们对这些情况一一进行考虑,完成算法的
-
Java实现简单小画板
Java制作简单画板,包括两个类,一个主要画板类Drawpad,一个画板监听器DrawListener类. 1.Drawpad类,包括画板,画板功能设计,保存图片等 package Java课程设计; import java.awt.Graphics; import javax.imageio.ImageIO; import javax.print.DocFlavor.STRING; import javax.swing.ImageIcon; import javax.swing.JDialog
随机推荐
- Linux内核链表实现过程
- 5种Java经典创建型模式详解
- asp.net COOKIES需要注意的一点
- 简单PHP上传图片、删除图片实现代码
- php URL跳转代码 减少外链
- 学习vue.js计算属性
- python+django快速实现文件上传
- JavaScript实现倒计时代码段Item1(非常实用)
- 点击地图div上的按钮实现对地图数据的入库操作
- springmvc集成shiro登录权限示例代码
- 右键菜单中添加打开MS-DOS的批处理bat
- Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)
- java 加密之RSA算法加密与解密的实例详解
- c#调用c++方法介绍,window api
- php绘制一个矩形的方法
- 兼容firefox,chrome的网页灰度效果
- Android 中 android.view.WindowLeaked的解决办法
- JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
- 将pip源更换到国内镜像的详细步骤
- 深入理解与使用keep-alive(配合router-view缓存整个路由页面)