Java算法8—递归

本文详细介绍了递归的概念,通过阶乘、斐波那契数列、二分查找、汉诺塔问题、归并排序等实例展示了递归的应用,并探讨了递归的边界条件、消除递归的方法。此外,还讨论了递归与栈的关系,以及递归在求解乘方、背包问题和组合选择等实际问题中的有趣应用。
摘要由CSDN通过智能技术生成

记得小时候经常讲的一个故事:从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和尚讲了一个故事,故事内容是“从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和尚讲了一个故事,故事内容…”

什么是递归,上面的小故事就是一个明显的递归。以编程的角度来看,程序调用自身的编程技巧称为递归( recursion)。

百度百科中的解释是这样的:递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。

1 递归的定义

递归,就是在运行的过程中调用自己。

递归必须要有三个要素:

①、边界条件

②、递归前进段

③、递归返回段

当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

2 求一个数的阶乘:n!

n! = n*(n-1)*(n-2)*......1 

规定:

①、0!=1

②、1!=1

③、负数没有阶乘

上面的表达式我们先用for循环改写:

/**
 * 0!=1  1!=1
 * 负数没有阶乘,如果输入负数返回-1
 * @param n
 * @return
 */
public static int getFactorialFor(int n){
    int temp = 1;
    if(n >=0){
        for(int i = 1 ; i <= n ; i++){
            temp = temp*i;
        }
    }else{
        return -1;
    }
    return temp;
}

如果求阶乘的表达式是这样的呢?

n! = n*(n-``1``)!

我们用递归来改写:

/**
 * 0!=1  1!=1
 * 负数没有阶乘,如果输入负数返回-1
 * @param n
 * @return
 */
public static int getFactorial(int n){
   
    if(n >= 0){
   
        if(n==0){
   
            System.out.println(n+"!=1");
            return 1;
        }else{
   
            System.out.println(n);
            int temp = n*getFactorial(n-1);
            System.out.println(n+"!="+temp);
            return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值