大学后两年主要在学习数据分析、数据挖掘算法,好久没有复习数据结构和算法这门课的知识。拾起来的过程不易,多做笔记。
一.递归
程序调用自身的编程技巧称为递归( recursion)。 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模 较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
通常来说,为了描述问题的某一状态,必须用到该状态的上一个状态;而如果要描述上一个状态,又必须用到上一个状态的上一个状态…… 这样用自己来定义自己的方法就是递归。
递归函数的格式
- 函数不在递归地情况称作基本情形(base case,也称基本情况)。
- 函数调用自身来执行子任务的情况就称作递归情形(recursive case)。
if (判断是否为基本情形)
return 该基本情形时的函数值
else if (判断是否为另一种基本情形)
return 该基本情形时的函数值
//递归情形
else return (执行某些工作并递归调用)
如利用递归算法阶乘
public static int Print(int n) {
if (n == 0)
return 0;
else {
System.out.println(n);
return Print(n - 1);
}
}