美文网首页
第5章 函数的递归调用

第5章 函数的递归调用

作者: 得力小泡泡 | 来源:发表于2020-03-30 17:55 被阅读0次

1、斐波那契数列?

算法分析:

表达式:f[i] = a * f[i - 1] + b * f[i - 2],为了让代码好些,直接从1到100都弄出来,直接输出f[n]

时间复杂度 O(n)

Java代码

import java.util.Scanner;

public class Main{
    static int N = 110;
    static int n,a,b,p;
    static int[] f = new int[N];
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt();
        a = scan.nextInt();
        b = scan.nextInt();
        p = scan.nextInt();
        f[1] = 1;
        f[2] = 1;
        for(int i = 3;i <= 100;i ++)
        {
            f[i] = (a * f[i - 1] + b * f[i - 2]) % p;
        }
        System.out.println(f[n]);
    }
}

2、递归函数3

算法分析:

通过递归的形式,直接按照表达式输出

时间复杂度 O(logn)

Java代码

import java.util.Scanner;

public class Main{
    static int N = 110;
    static int n;
    static int[] f = new int[N];
    static int dfs(int x)
    {
        if(x <= 0) return 0;
        if(x == 1) return 1;
        if(x > 1 && x % 2 == 0) return 3 * dfs(x / 2) - 1;
        if(x > 1 && x % 2 == 1) return 3 * dfs((x + 1)/ 2) - 1;
        return 0;
    }
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt();
        System.out.println(dfs(n));
    }
}

3、阿克曼函数

算法分析:

通过递归的形式,直接按照表达式输出

Java代码

import java.util.Scanner;

public class Main{
    static int N = 110;
    static int n,m;
    static int[] f = new int[N];
    static int dfs(int m,int n)
    {
        if(m == 0) return n + 1;
        if(n == 0 && m > 0) return dfs(m - 1,1);
        if(m > 0 && n > 0) return dfs(m - 1,dfs(m,n - 1));
        return 0;
    }
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        m = scan.nextInt();
        n = scan.nextInt();
        System.out.println(dfs(m,n));
    }
}

4、字符串弱等于

算法分析:

审题很重要,分为几点

  • 1、a == b 返回true
  • 2、若为偶数,将ab中分,分成a1,a2,b1,b2
    dfs(a1,b1) && dfs(a2,b2)成立或者
    dfs(a1,b2) && dfs(a2,b1)成立则返回true
  • 3、其余情况均返回false

时间复杂度 O(logn)

Java代码

import java.util.Scanner;

public class Main{
    static boolean dfs(String a,String b)
    {
        if(a.equals(b)) return true;
        if(a.length() == 1) return false;
        if(a.length() % 2 == 0 && a.length() == b.length())
        {
            int mid = a.length() / 2;
            String a1 = a.substring(0,mid); 
            String a2 = a.substring(mid); 
            String b1 = b.substring(0,mid); 
            String b2 = b.substring(mid); 
            if((dfs(a1,b1) && dfs(a2,b2)) || (dfs(a1,b2) && dfs(a2,b1))) return true;
            else return false;
        }
        return false;
    }
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String a = scan.next();
        String b = scan.next();
        if(dfs(a,b)) System.out.println("YES");
        else System.out.println("NO");
    }
}

相关文章

  • 029_wz_hm_函数的递归

    函数的递归 函数调用自身的编程技巧成为递归 递归函数的特点 特点: 一个函数内部调用自己 函数内部可以调用其他函数...

  • [每天进步一点点~] 递归与闭包

    1.递归 【定义】:在自己函数的内部调用自己(自己调用自己) (函数自调用) 。递归函数 简单举例?: 阶乘的递归...

  • 递归调用

    什么是递归调用 递归调用就是在本函数中连续不断地对自身函数进行调用。 递归调用注意点 递归调用函数要有明确的某一或...

  • 递归,回溯

    什么叫递归:函数在运行时调用自己,这个函数就叫递归函数,调用的过程叫做递归; 递归的特点:1、递归函数必须要有终止...

  • 单信js——4难点部分

    递归: 递归函数是指在函数内部调用函数自身。注意:递归的出口:什么情况下结束调用递归的入口:什么情况下调用自已 /...

  • 深刻理解递归———通过栈图来理解

    函数调用另外一个函数是合法的;函数调用自己也是合法的。调用自己的过程称为递归函数,这个执行过程叫做递归。 递归在数...

  • 关于原生js-递归

    递归函数---在函数内部间接或直接自己调用自己 递归又分为直接递归或者间接递归 直接递归指在函数中自己调用自己 间...

  • 递归函数

    1.递归函数概述及用法 一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数 的递归...

  • 重复

    递归在自己的定义中调用自己的函数叫做递归函数(Recursive Function)。 尾递归普通的递归调用并不高...

  • JavaScript递归函数

    JavaScript 支持函数的递归调用。 所谓递归函数,就是在函数体内调用函数本身。 使用递归函数的一个常见例子...

网友评论

      本文标题:第5章 函数的递归调用

      本文链接:https://www.haomeiwen.com/subject/ucaluhtx.html