递归与分形
一、递归
1.什么是递归?
递归是函数(方法)自己调用自己。
多个函数相互调用,形成循环调用的过程。
例1:
methodA(){
methodA();
methodA();
methodA();
methodA();
}
例2:
methodA(){
methodB();
}
methodB(){
//代码
methodC();
}
methodC(){
//代码
methodB();
}
2.如果递归进入无限递归结果会怎样?
堆栈溢出(错误)
3.在定义递归的时候,必须要设置相应的条件:
1)递归必须要有退出条件
2.)解决同一类问题的集合。
注意: 递归在执行过程中,会不停的开辟内存空间存储数据,所以导致递归的性能非常差。
4.递归分为那几部分?
methodA(int i){
//代码1
methodA(i-1);
//代码2
}
while(true){
int i = 10;
}
前段:定义变量对象,计算操作,结束条件
后段:计算操作,返回结果
5.举例
斐波那契数列使用递归来实现
1,1,2,3,5,8,13,21,34,...
输出10个斐波那契数列,1和1不计算在内。
Fib(2) = Fib(1)+Fib(1)
Fib(3) = Fib(1)+Fib(2)[Fib(1)+Fib(1)]
Fib(5) = Fib(2)+Fib(3)[Fib(1)+Fib(2)]
public class Fib{
public static void main(String [] args){
Fib f = new Fib();
f.fib(1,1);
}
public void fib(int a,int b){
int i=1;
if(i>10)
return;
i++;
System.out.println(a+"\n"+b+"\n"+(a+b));
fib(a,a+b);
}
}
二、分形
分形是递归的应用,运用递归不断的循环,形成非常漂亮的图形。
1.三角形
三角形是先画一个三角形,然后不断的取三遍中点,不断的画,如此循环。
分为上方三角,左边三角,右边三角三个部分,三个递归
int a1,a2,b1,b2,c1,c2;
public void f1(int x1,int x2,int y1){
//画大三角形
int p1,p2,q1,q2,m1,m2,ab,n=3;
ab = Math.abs(x2-x1);
a1 = (x1+x2)/2;
a2 = y1-(int)(ab*Math.pow(3, 0.5)/2);
c1 = x1;
c2 = y1;
b1 = x2;
b2 = y1;
p1 = (a1+c1)/2;
p2 =