递归阶乘详解

简介: 递归阶乘详解

递归阶乘

什么是递归?

直接递归:方法自身调用自己,当满足一定条件时跳出。以编程的角度来看,递归指的是方法定义中调用方法本身的现象

间接递归:A方法调用B方法,B方法调用C方法,C方法再调用A方法

递归为什么必须要有出口?

一直调用下去 ,就是死循环了, 报错; java.lang.stackoverflowError:栈内存溢出

什么样的情况下使用递归?

大规模的问题可以分成类似的小规模的问题来解决;

大规模问题的解决方式和小规模问题的解决方式一样;

阶乘概念:一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n! ------百度百科

计算方法:n!=1×2×3×…×n

阶乘亦可以递归方式定义:0!=1,n!=(n-1)!*n

代码实现

package top.gaojc.test;

import java.util.Scanner;

public class Demo_04 {

    // 递归阶乘
    public static void main(String[] args) {
        // 键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.print("请您输入需要求出阶乘的数值:");
        int jc = sc.nextInt();
        // 调用方法 定义变量接收阶乘返回值的乘积
        int sum = getJc(jc);
        // 打印结果
        System.out.println(sum);
    }

    // 定义方法
    private static int getJc(int jc) {
        // 递归头 如果jc==1 返回1
        if (jc == 1) {
            return 1;
        } else {
            // 递归体  这里如果传入数字不是1,那么就会调用自身,只要不等于1 就会一直调用
            // jc * jc-1 * jc-1-1 * jc-1-1-1......
            return jc * getJc(jc - 1);
        }
    }
}
目录
相关文章
|
数据安全/隐私保护 虚拟化 Windows
如何在 VM 虚拟机中安装 Windows 7 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Windows 7 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Windows 7 操作系统保姆级教程(附链接)
|
域名解析 Linux Docker
CentOS8 安装 Docker
本文主要为大家讲解在CentOS8 上安装 Docker的过程,以及安装中的常见问题解决。
23959 2
CentOS8 安装 Docker
|
9月前
|
存储 算法 C++
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
二分查找的基本思想是:每次比较中间元素与目标元素的大小,如果中间元素等于目标元素,则查找成功;顺序表是线性表的一种存储方式,它用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素在物理存储位置上也相邻。第1次比较:查找范围R[0...10],比较元素R[5]:25。第1次比较:查找范围R[0...10],比较元素R[5]:25。第2次比较:查找范围R[0..4],比较元素R[2]:10。第3次比较:查找范围R[3...4],比较元素R[3]:15。,其中是顺序表中元素的个数。
300 68
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
|
12月前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
795 0
Java/Spring项目的包开头为什么是com?
|
12月前
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
19012 5
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
Ubuntu 虚拟化
Ubuntu安装VMtools实现与主机之间复制粘贴
一、安装 VMware Tools 右键点击你创建的系统,然后出现菜单下滑找到安装 VMware Tools(T) 这个点击安装; 右键点击你创建的系统,然后出现菜单下滑找到设置; 然后弹出虚拟机设置-->点击选项-->客户机隔离-->启用复制粘贴; 二、Ubuntu命令 这些命令假设你的Ubuntu系统已连接到互联网并且已配置为使用apt软件包管理器; 如果你的网络环境有限,你可能需要提前配置好网络或更换软件源; Ubuntu上安装和配置VMtools以实现与主机之间的文本复制粘贴功能; 1、打开终端(Terminal)。 2、运行以下命令以卸载旧版本的open-vm-tools: su
2888 1
成功解决:CentOS7中无法连接网络
这篇文章介绍了如何解决CentOS 7虚拟机无法连接网络的问题。作者猜测问题可能是由于虚拟机软件的网关和CentOS 7系统的网关不一致导致的。文章提供了两种解决方案:修改虚拟网络编辑器的网关或修改CentOS系统的网关和IP地址。作者选择了后者,并演示了如何在CentOS终端中以root用户身份修改IP和网关。
成功解决:CentOS7中无法连接网络
|
JavaScript 前端开发 IDE
团队协作(一)—— 你不知道的 ESLint + Prettier2
团队协作(一)—— 你不知道的 ESLint + Prettier2
353 0
|
Ubuntu NoSQL API
Ubuntu下安装GTK的三种方法
我利用此方法成功在UBUNTU 10.04下安装GTK 2.20.1。 一、安装 1、安装gcc/g++/gdb/make 等基本编程工具 $sudo apt-get install build-essential 2、安装 libgtk2.
3624 0