java中递归

63 篇文章 0 订阅
60 篇文章 0 订阅

递归

递归就是A方法调用A方法,也就是自己调用自己

  1. 求5的阶乘
public static void main(String[] args) {
        System.out.println(countable(5));
    }
    public static int countable(int a){
        if(a==1){
            return 1;
        }
        return a*countable(a-1);
    }
当我们在主方法调用阶乘方法,就会返回5*countable(a-1),可以理解为5乘以4!,而4!=4乘以3!,以此类推。程序中的if语句就是递归的边界,它控制递归的次数。在该程序中,当执行到第五次的时候,就会直接返回1,不会执行下面的return。因此最后会返回5乘以4乘以3乘以2乘以1,这就是递归。
  1. 举一个生活中常用的例子帮助大家理解。从一楼到二楼一共20个台阶,一次能走1个台阶或2个台阶,请问从一楼到二楼一共多少总走法?
我们可以进行逆向思维,要爬到第20个台阶,最后一步只有2种情况,从第19个台阶爬一个台阶上去或从第18个台阶爬2个台阶上去,因此就是f(20)=f(19)+f(18)。这个问题就被我们拆解成了爬19个台阶的走法加上爬18个台阶的走法,然后再向下推,就是f(20)=f(19)+f(18)=[f(18)+f(17)]+[f(17)+f(16)],…
执行下面代码,最终会有10946种方法`
 public static void main(String[] args) {
        System.out.println(f(20));
    }
    public static int f(int a){
        if(a==1){
            return 1;
        }
        if(a==2){
            return 2;
        }
        return f(a-1)+f(a-2);
    }
递归是不停的压栈,会占用大量内存。如果递次数过多,会发生占内存溢出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值