Java递归,尾递归

简介: 递归的进一步优化,使用尾递归进行优化递归,减少递归的次数,提高性能

递归

  • 1.递归方法,一个方法体内调用它自身
  • 2.方法递归包含了一种隐式的循环,他会重复执行某行代码,但这种重复无序循环控制递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似与死循环
题目
已知有一个数列:f(0) = 1,f(2) = 4,f(n+2) = 2*f(n+1) +f(n),
其中n是大于0的整数,求f(10)的值

递归

//    递归
    public int f(int n) {
        if(n==0) {
            return 1;
        }else if (n == 1) {
            return 4;
        }else {
            return 2*f(n-1)+f(n-2);
        }    
    }
尾递归
尾递归可以减少函数的调用的次数,避免一些重复性的运算,提高运行效率
//    尾递归
    public int func(int n, int a,int b,int c) {
        if (c==0) {
            return 1;    
        }else if (c==1) {
            return 4;
        }else {
            if(n==c) {   # 控制循环的结束
                return a+2*b;
            }
            else {
                return func(n, b,a+2*b,c=c+1);    # 将每次循环的结果传入循环
            }
                
        }
相关文章
|
4月前
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
40 1
java基础(11)函数重载以及函数递归求和
|
6月前
|
算法 Java
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
98 7
|
7月前
|
Java
蓝桥杯Java组暴力递归搜图
蓝桥杯Java组暴力递归搜图
42 4
|
7月前
|
Java
java实现斐波那契数列(递归、迭代、流)
java实现斐波那契数列(递归、迭代、流)
|
7月前
|
算法 前端开发 Java
探讨Java中递归构建树形结构的算法
探讨Java中递归构建树形结构的算法
108 1
|
7月前
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
50 0
|
7月前
|
Java 大数据 程序员
老程序员分享:java递归
老程序员分享:java递归
31 0
|
7月前
|
Java
二分查找-递归(java)
二分查找-递归(java)
|
7月前
|
Java
java使用递归遍历文件目录
java使用递归遍历文件目录
|
7月前
|
Java
杭电acm2018 母牛的故事 Java解法 经典递归
杭电acm2018 母牛的故事 Java解法 经典递归
43 0