欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

递归算法 博客分类: Java Notes  

程序员文章站 2024-02-18 10:32:46
...

递归算法:是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

递归过程一般通过函数或子过程来实现。

递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。

递归算法解决问题的特点:
  (1) 递归就是在过程或函数里调用自身。
  (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
  (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
  (4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

递归的原理,其实就是一个栈(stack), 比如求5的阶乘,要知道5的阶乘,就要知道4的阶乘,4又要是到3的,以此类推,所以递归式就先把5的阶乘表示入栈, 在把4的入栈,直到最后一个,之后呢在从1开始出栈, 看起来很麻烦,确实很麻烦,他的好处就是写起代码来,十分的快,而且代码简洁,其他就没什么好处了,运行效率出奇的慢.

例: 求n的阶乘
f(n)
{
 if(n == 0 || n == 1)
  {
  return 1;
  }
 else
  {
  return n*f(n-1); //自己调用自己,求n-1的阶乘
  }
}

 

例如:求5的阶乘

 

public class Recursive {
	//求5的阶乘
		public static void main(String[] args) {
			System.out.println(dg(5));
		}

		 static int dg(int i) {
			int sum;
			if (i == 1)
				return 1;
			else
				sum = i*dg(i - 1);
			return sum;
		}
	}

 

 

 

递归 实现 1 至 100 的和

public class Test {

	public static void main(String[] args) {
		System.out.println(dg(100));
	}

	static int dg(int i) {
		int sum;
		if (i == 1)
			return 1;
		else
			sum = i + dg(i - 1);
		return sum;
	}
}

 或者

public class MyDay{
public static void main(String[] args){
MyDay m=new MyDay();
int sum=m.fun(100);
System.out.println("1+2+......100="+sum);
}
public int fun(int n){

if(n==1)
return 1;
else
return n+fun(n-1);
}
} 

 递归 实现 1 至 100 的偶数和

 

public class Recursive {
	//1到100的偶数和
		public static void main(String[] args) {
			System.out.println(dg(100));
		}

		 static int dg(int i) {
			int sum;
			if (i == 2)
				return 2;
			else
				sum = i + dg(i - 2);
			return sum;
		}
	}

 递归 实现 1 至 100 的奇数和

 

public class Recursive {
	//1到100的奇数和
		public static void main(String[] args) {
			System.out.println(dg(99));
		}

		 static int dg(int i) {
			int sum;
			if (i == 1)
				return 1;
			else
				sum = i + dg(i - 2);
			return sum;
		}
	}

 

 第一个人是10岁,一次加2岁,第二个人是12岁,第三个人是14岁,第八个人是多少岁,用递归的算法输出答案?

 

// 第一个人是10岁,一次加2岁,第二个人是12岁,第三个人是14岁,第八个人是多少岁,用递归的算法输出答案?


public class Recursive1 {
	public static void main(String[] args) {
		
		System.out.println(num(8));
		
	}
	static int num(int i){
		int sum;
		if(i==1){
			return 10;
		
		}else{
			sum=2+num(i-1);
			return sum;
		}
	}
}