递归算法 博客分类: Java Notes
递归算法:是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
递归过程一般通过函数或子过程来实现。
递归算法的实质:是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
递归算法解决问题的特点:
(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; } } }
推荐阅读
-
ibatis3 简单示例 博客分类: java JavaiBATISSQLDAOJSP
-
递归算法 博客分类: Java Notes
-
js中字符串的操作(截取) 博客分类: JS Notes
-
js中字符串的操作 博客分类: JS Notes
-
js中常用的属性 博客分类: JS Notes
-
js中Number数字数值运算后值不对 博客分类: JS Notes
-
js中常用的属性 博客分类: JS Notes
-
js中Number数字数值运算后值不对 博客分类: JS Notes
-
JAVA -Xms -Xmx -XX:PermSize -XX:MaxPermSize 区别 博客分类: Java Notes
-
js字符串的操作(分割) 博客分类: JS Notes