递归---

本文介绍了递归的概念,强调了递归必须有出口且递归次数不宜过多。通过计算5的阶乘和解决兔子问题(斐波那契数列)展示了递归在编程中的应用,分别给出了普通方法和递归方法的实现。
摘要由CSDN通过智能技术生成

递归

一、递归的概念

理解:递归就是方法定义中调用方法的一种现象。

递归使用时的注意事项

1、递归要有出口,不能是死递归

2、递归的次数不宜过多,否则会溢出

递归可以解决问题的特点:

1)递归就是方法里调用自身。
2)在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。
3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

重点:递归算法一定要注意的是出口,必须要有一个明确的条件。到达这个条件时,就不再递归了。

二、程序案例

1、请计算5的阶乘5!
普通方法

分析:5!=5×4×3×2×1

利用for循环进行

public static void main(String[] args) {
       int sum=1;
        for(int i=1;i<=5;i++){
            sum=sum*i;
       }
        System.out.println(sum);

    }

例比计算n的阶乘:

 public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入计算的阶乘:");
        int n=sc.nextInt();
       int sum=1;
        for(int i=1;i<=n;i++){
            sum=sum*i;
       }
        System.out.println(sum);

    }
递归的方法
 public static int jiecheng(int n){
        if(n==1){
            return 1;
        }else{
            return  n*jiecheng(n-1);
        }
    }

    public static void main(String[] args) {
        int sum=jiecheng(5);
        System.out.println(sum);
    }
2、兔子问题(斐波那契数列)
有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,
假如兔子都不死,问第二十个月的兔子对数为多少?

分析:

月份: 1 2 3 4 5 6 7…

兔子对数: 1 1 2 3 5 8 13…

结论:由此,我们可以发现从第三个月开始,兔子对数是前两个月的兔子对数之和。

普通方法

在用普通方法思考时,我想的是用数组的方式。代码如下:

public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);
    System.out.println("请输入月份:");
    int a=sc.nextInt();
    int arr[]=new int[a];
    arr[0]=1;
    arr[1]=1;
    for(int i=2;i<arr.length;i++){
        arr[i]=arr[i-1]+arr[i-2];
    }
    System.out.println(arr[a-1]);

}
递归方法

分析:1月份与2月份的兔子对数都为1,则出口为当n==1时都返回1.

public static int tuzi(int n){
    if(n==1||n==2){
        return 1;
    }else{
        return tuzi(n-1)+tuzi(n-2);
    }
}
public static void main(String[] args) {
       int sum=tuzi(20);
        System.out.println(sum);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值