Day16 —— 递归
1. Background
今天是学习java的第十六天,今天学习的是递归。
递归虽然有点难以理解,但是今天所练习的求和以及斐波那契数列是学任何一门编程语言都必练的过程。所以这两个函数该怎么写,我早已烂熟于心。
2. Description
以此类推是递归的基本思想。
我的理解是大事化小,小事化了。解决一个事情很难,但是把它分摊到无数个小项目上面那难度就显著下降了。
递归的两个条件
- 可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
- 存在一种简单情境,可以使递归在简单情境下退出。(递归出口)
递归三要素:
- 一定有一种可以退出程序的情况;
- 总是在尝试将一个问题化简到更小的规模
- 父问题与子问题不能有重叠的部分
3. Code
package datastructure;
/**
* 递归,一个调用自己的方法。系统会自动分配一个栈给它。
*
* @author Leo Liu lyx1443807042@qq.com
*/
public class Recursion {
/**
*************
* Sum to N. No loop.
* @param paraN The given value.
* @return The sum.
*************
*/
public static int sumToN(int paraN) {
if (paraN <= 0) {
return 0;
} // Of if
return sumToN(paraN - 1) + paraN;
} // Of sumToN
/**
*************
* 斐波那契数列,每个数等于前两数之和。
* @param paraN The given value.
* @return The sum.
*************
*/
public static int fibonacii(int paraN) {
if (paraN <= 0) {
return 0;
}
if (paraN == 1) {
return 1;
}
return fibonacii(paraN - 1) + fibonacii(paraN - 2);
}
/**
* The entrance of program.
*
* @param args Not sued now.
*/
public static void main(String[] args) {
// sumToN testing.
int tempNum = 5;
System.out.println("0 sum to " + tempNum + " = " + sumToN(tempNum));
tempNum = -1;
System.out.println("0 sum to " + tempNum + " = " + sumToN(tempNum));
// fibonacii testing
for (int i = 0; i < 10; i++) {
System.out.println("Fibonacii " + i + ": " + fibonacii(i));
}
}
}
运行结果: