2024 蓝桥打卡Day31

递归与辗转相除法

  • 递归(Recursion)
  • 辗转相除法(Euclidean Algorithm)
  • 总结

在这里插入图片描述

递归(Recursion)

递归是指一个函数在执行过程中调用自身的过程。在编程中,递归函数在遇到满足某个条件时会停止调用自身,从而结束递归。递归经常用于解决可分解为相似但规模较小的子问题的问题。在递归的每一层,问题都会变得更小,直到达到基本情况(终止条件),然后逐层返回结果。

递归的经典示例是计算阶乘。阶乘表示从1到给定的数字的乘积。例如,5的阶乘是1 * 2 * 3 * 4 * 5 = 120。这可以通过递归函数来计算:

public static int factorial(int n) {
    if (n == 0) {
        return 1; // 基本情况:0的阶乘为1
    } else {
        return n * factorial(n - 1); // 递归调用:n的阶乘为n乘以(n-1)的阶乘
    }
}

递归函数必须具有终止条件,否则它将永远递归下去,导致栈溢出。

辗转相除法(Euclidean Algorithm)

辗转相除法,也称为欧几里德算法,是一种用于计算两个整数的最大公约数(GCD)的算法。最大公约数是能够整除两个数的最大正整数。

辗转相除法的基本思想是:假设a和b是两个整数,其中a > b。我们用a除以b,得到商q和余数r,即a = bq + r。那么a和b的最大公约数等于b和r的最大公约数。

下面是辗转相除法的基本算法:

如果b等于0,则a就是最大公约数。
否则,我们将a赋值给b,将r赋值给a,然后重复步骤1,直到b等于0为止。
下面是一个用Java实现的简单例子:

public static int findGCD(int a, int b) {
    if (b == 0) {
        return a; // 基本情况:b等于0,a就是最大公约数
    } else {
        return findGCD(b, a % b); // 递归调用:继续求b和a除以b的余数的最大公约数
    }
}

这个方法会一直递归调用直到b等于0,这时a就是最大公约数。

总结

递归是一种函数调用自身的编程技术,用于解决问题,其中问题被分解为规模较小的子问题。
辗转相除法是一种用于计算两个整数的最大公约数的数学算法,它基于整数除法和取余运算。

上一篇:C语言:文件操作(一)


下一篇:vue3从精通到入门7:ref系列