前置知识:方法递归

本文详细介绍了递归的概念、形式(直接递归和间接递归)、注意事项(避免死循环和栈溢出),并通过Java代码示例演示了阶乘和求和的递归实现。最后,以猴子吃桃问题为例,展示了如何运用递归解决实际问题。
摘要由CSDN通过智能技术生成

什么是方法递归?

*递归是一种算法,在程序设计语言中广泛应用。
从形式上说:方法调用自身的形式称为方法递归(recursion)。


递归的形式


*直接递归:方法自己调用自己。
*间接递归:方法调用其他方法,其他方法又回调方法自己。

使用方法递归时需要注意的问题: 


递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。

递归算法三要素: 


递归的公式:f(n)=f(n-1)*n; 
递归的终结点:f(1) 
递归的方向必须走向终结点: 
f(5)=f(4)*5                 
f(4)=f(3)*4                 
f(3)=f(2)*3 
f(2)=f(1)*2 
f(1)=1

public class DiGuiAnLi {
    public static void main(String[] args) {
        //计算n的阶乘
        System.out.println(jiecheng(4));

    }
    public static int jiecheng(int n){
        if (n == 1) {
        return 1;
        }else{
            return jiecheng(n-1)*n;
        }
    }
}
public class DiGuiQIUHE {
    //求1-n的和
    public static void main(String[] args) {
        System.out.println(sum(3));
    }
    public static int sum(int n){
        if (n==1){
            return 1;
        }else{
            return n+sum(n-1);
        }
    }
}

案例猴子吃桃问题


·猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个第二天又吃了前天剩余桃子数量的半,觉得好不过瘾,于是又多吃了一个,以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第10天的时候发现桃子只有1个了。需求:请问猴子第-天摘了多少个桃子?

public class DiGuiTaoZi {
    public static void main(String[] args) {
        /**
         * 案例猴子吃桃问题
         * ·猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个第二天又吃了前天剩余桃子数量的半,觉得好不过瘾,
         * 于是又多吃了一个,以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第10天的时候发现桃子只有1个了。
         * 需求:请问猴子第-天摘了多少个桃子?
         * f(10)=1
         * f(9)=(f(10)+1)*2
         *f(n-1)=(f(n)+1)*2
         * f(1)=(f(2)+1)*2
         * ...
         * f(8)=(f(9)+1)*2
         * f(9)=(f(10)+1)*2
         * f(10)=1
         */
        System.out.println(tiaozi(1));
    }
    public static int  tiaozi(int n) {
        if (n==10){
            return 1;
        }else{
            return (tiaozi(n+1)+1)*2;
        }
    }
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值