递归详解.

一、方法递归的了解

方法递归:
    1、什么是递归?
        方法自己调用自己,这就是方法递归
    2、当递归时程序没有结束条件,一定会发生:
        栈内存溢出错误: stackOverflowError
        所以:递归必须要有结束条件。(这是一个非常重要的知识点)
    3、递归假设是有结束条件的,就一定不会发生栈内存溢出错误吗?
        假设这个结束条件是对的,是合法的,递归有的时候也会出现栈内存溢出错误。
        因为有可能递归的太深,栈内存不够了。因为一直在压栈。
    4、如果递归出现栈溢出了 首先观察返回的结果条件是否正确
       要是正确了 非要用这玩意可以增大内存条~ 

代码演示如下: 

public class DiGuiTest01 {
    public static void main(String[] args) {
        doSome();
    }
    // 为了方便下面就把方法名写成一样了~

    public static void doSome(){
        System.out.println("doSome begin");
        // 调用方法:doSome()既然是一个方法,那么doSome方法可以调用吗? 当然可以
        // 目前这个递归是没有结束条件的,会出现什么问题?  栈内存溢出
        doSome();
        // 这行代码永远执行不了
        System.out.println("doSome over");
    }
    
        public static void doSome(){
        System.out.println("doSome begin");
        doSome();
        System.out.println("doSome over");
    } public static void doSome(){
        System.out.println("doSome begin");
        doSome();
        System.out.println("doSome over");
    } public static void doSome(){
        System.out.println("doSome begin");
        doSome();
        System.out.println("doSome over");
    } public static void doSome(){
        System.out.println("doSome begin");
        doSome();
        System.out.println("doSome over");
    }
}

思考上面代码会出现什么问题:

例题演练:计算1~n的和(乘)

使用for循环代码演示如下:

package com.bjpowernode.java.io;
import  java.io.*;


public class A {
    // 利用for循环求1~n的和
    public static void main(String[] args) {

        int s =Sum(3);
        System.out.println(s);    // 6
    }
    // 单独编写一个计算1~n和的方法
    public static int Sum(int n){
        int sum =0;
        for (int i =0;i<=n;i++){
            sum+=i;
        }
        return sum;
    }
}

使用递归代码演示如下:

package com.bjpowernode.java.io;
import  java.io.*;

public class A {
    // 程序入口
    public static void main(String[] args) {
        int result =sum(3);
        System.out.println(result);

    }
    // 单独写一个计算方法
    // 假设n为3
    // 3+2+1
    public static int sum(int n){
        // 判断输入的n是否为1,为1的话直接输出1就完事了
        if (n==1){
            return 1;
        }
        // 程序执行到这里说明n不为1
        return n +sum(n-1);
        /*
            解释 return n +sum(n-1);
                1、首先因为返回类型是int类型,所以必须return 同时程序入口(main方法)必须接收返回值
                2、当n为3的时候  n +sum(n-1) 成了 3+sum(2), sum(2)调用sum()方法把2传入 成了2+sum(1)
                此时 3+sum(2) 变成了 3+2+sum(1) 同理 sum返回1 是1,所以 return 3+2+1
         */
        
        // return n *sum(n-1);  阶乘
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值