递归

1.递归的概述

  • 生活中的递归: 放羊–赚钱–盖房子–娶媳妇–生娃–放羊–赚钱–盖房子–娶媳妇–生娃–放羊…
  • 程序中的递归: 指在当前方法内调用自己的这种现象。
  • 递归的注意事项:
    • 递归要有出口(结束方法),否则会报栈内存溢出错误StackOverflowError
    • 递归的出口不能太晚了

案例演示

package com.itheima.demo5_各种流.demo2_递归;

import java.lang.reflect.Method;

public class test {
    static int count = 0;

    public static void main(String[] args) {
                   /*
            递归:
                概述:方法自己调用自己
                注意:
                    1.递归一定要有出口,否则会报栈内存溢出错误StackOverflowError
                    2.递归的出口不能太晚,太晚了依然会报栈内存溢出错误StackOverflowError
                    4.合理递归才行
         */
        method();


    }
    public static  void  method(){
        System.out.println("开始");    // 开始 1 开始3
        count++;
        if (count == 5){
            //结束方法
            return;

        }
        method();  //开始2
        System.out.println("结束"); //结束1
    }
}

结果

开始
开始
开始
开始
开始
结束
结束
结束
结束


2.递归累和

需求

  • 定义一个方法,计算1 ~ n的累加和

分析

  • num的累加和 = num + (num-1)的累和,所以可以把累加和的操作定义成一个方法,递归调用。

实现

代码实现

package com.itheima.demo5_各种流.demo2_递归;

public class test2 {
    public static void main(String[] args) {
         /*
            练习一:使用递归计算1 ~ n的和
                分析:
                        1 的累加和 = 1                      1的累加和=1
                        2 的累加和 = 1 + 2                  2的累加和=2+1的累加和
                        3 的累加和 = 1 + 2 + 3              3的累加和=3+2的累加和
                        4 的累加和 = 1 + 2 + 3 + 4          4的累加和=4+3的累加和
                        .....
                        n 的累加和                          n的累加和=n+(n-1)的累加和
         */
        // 调用getSum方法计算5的累加和
        int sum =getsum(5);
        System.out.println(sum);

    }
    public static int getsum(int n){
     if (n==1){
         return 1;
     }
     return n+getsum(n-1);
    }
}

结果
15

3.递归求阶乘

需求

  • 计算n的阶乘

分析

  • 阶乘:所有小于及等于该数的正整数的积。

    n的阶乘:n! = n * (n-1) 3 * 2 * 1

n的阶乘 = n * (n1)的阶乘,所以可以把阶乘的操作定义成一个方法,递归调用。

  • 推理得出:n! = n * (n-1)!

实现

代码实现:

package com.itheima.demo5_各种流.demo2_递归;

public class test3 {
    public static void main(String[] args) {
        System.out.println(jiechneg(4));


    }
    //写阶乘方法

   // n*(n-1)
    //一直调用n-1就可

    public static int jiechneg(int n){
        if (n==1){
            return 1;
        }
        return n*jiechneg(n-1);

    }
}

结果 24

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值