递归<一> --- 求阶乘

来源:互联网 发布:淘宝店铺轮播图片素材 编辑:程序博客网 时间:2024/04/29 14:21

1、递归定义:百度百科
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

2、使用递归思想进行程序设计时要考虑的两个问题:
1. 子问题须与原始问题为同样的事,且更为简单;
递归的本质的通过有限次数(多次)调用自身,来将一个复杂的问题最终转化为一个简单的问题(得到已知条件),既然是调用自身,说明每次调用处理的问题应该是一致的。
2. 不能无限制地调用本身,须有个出口。
出口就是终止递归的条件, 我们必须要有这么一个条件来终止调用自身逐层返回一个已知的值来得到结果,否则不限递归下去,就如同死循环。

package cn.test;import java.util.Scanner;/** * 递归求阶乘 */public class Recursion1 {    public static void main(String[] args) {        System.out.println("输入一个大于0的数字,求该数字阶乘");        Scanner sc = new Scanner(System.in);        int num = sc.nextInt();        if(num > 0 ){            System.out.println(recursive(num));        }else{            System.out.println("输入有误");        }    }    private static int recursive(int num) {        if(num == 1){ //出口            return num;        }else{            return num * recursive(num-1);//调用自身        }    }}

这里写图片描述

debug模式,可以清楚看到:
第17行开始调用方法recursive(num);
第25行方法被调用自身了4次后,第五次调用自身的时候,num的值为1(出口),将已知的值(return num;(num 就是1))逐层返回来完成之前调用第25行的方法。
这里写图片描述

递归的思想:
要完成本次方法的调用,就需要获取到本次方法内调用的方法的值,通过一层层调用,最终获取到一个已知的值,再一层层的返回来完成各层的方法,最后回到第一次调用的方法得到最终的值。
在本例中就是把5!的问题最终分解为1!的问题。
这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为手机自动进入耳机模式怎么办 华为手机耳机怎么挂了电话怎么办 华为手机听筒声音小怎么办 华为p9手机听筒声音小怎么办 苹果6总是耳机模式怎么办 苹果没有插耳机模式怎么办 苹果手机切换耳机模式怎么办 苹果6s出现耳机模式怎么办 苹果6变成了耳机模式怎么办 苹果手机成耳机模式了怎么办 华为mate8耳机声音小怎么办 移动sim卡丢了怎么办 蓝牙耳机开不开机怎么办 苹果手机蓝牙不匹配怎么办 苹果6蓝牙坏了怎么办 蓝牙密钥不正确不匹配怎么办 华为p6开不了机怎么办 华为c199手机不停重启怎么办 华为手机用户数据被锁定怎么办 朵唯手机丢了怎么办 网件r6220穿墙差怎么办 无线网打王者卡怎么办 酷翼x9忘了密码怎么办 楼上的路由器楼下不好使怎么办 电信4g网络不好怎么办 农村只有2g网怎么办 电信卡4g网速慢怎么办 小米手机触屏失灵怎么办 荣耀v10电信网速很慢怎么办 华为路由器掉线了怎么办 三星s6只识别一张卡怎么办 华为手机卡不显示了怎么办 华为账号手机卡丢了怎么办 荣耀8耗电量太快怎么办 vivo卡2不显示怎么办 电信宽带玩王者荣耀卡怎么办 联通4g玩游戏卡怎么办 华为悦盒遥控器丢了怎么办 6s不能用电信卡怎么办 iphone6电信卡无服务怎么办 魅族手机电信卡怎么办