/*
经典的生兔子游戏:
说如果兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来;
假如所有兔都不死,那么一年以后可以繁殖多少对兔子呢?
*/
class Fibonacii {
public static void main(String[] argv){
int result = fibonacii(12);
System.out.println(result);
}
//斐波那契函数实现(递归调用)
public static int fibonacii(int n){
if (n<2) {
return n==0?0:1;
}
//这里的fibonacii就是函数自己,它在调用自己
return fibonacii(n-1)+fibonacii(n-2);
}
}
写递归程序最怕的就是陷入永不结束的无穷递归中,所以,每个递归定义必须至少有一个条件,满足时递归不再进行,即不再引用自身而是返回值退出
其实使用递归实现的代码使用迭代方式也能实现;
二者各有优略:
递归使用的是选择结构,递归能使程序的结构更清晰、更简洁、更容易让人理解;但是大量的递归调用会建立函数的副本,会耗费大量的时间和内存。
迭代使用的是循环结构,不需要反复调用函数和占用额外的内存。
网友评论