递归算法研究

今日来连连碰到递归算法的使用,于是自己便花时间看了一下。以下作为总结:

学过程序设计的朋友都知道,存在自调用的算法称作递归算法。递归算法设计的基本思想是:对于一个复杂的问题,把源问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递归的出口,这样源问题就有递归的解。

1、阶乘的求法。最简单的,也是最经典的题目。

package 递归;
public class rec1 {
	/**
	 * @param 求解n!
	 */
	public static void main(String[] args) {
		rec1 rec1 = new rec1();
		System.out.println(rec1.fun(5));

	}
	
	public int fun(int num){
		if(num==1)  return 1;
		return num*fun(num-1);
	}
}


2、给定一个nn<5000,不停的*2一直到结果>5000为止,然后输出这一连串的数字。如n=3,output:3,6,12,24,48,96,192,384,768,1536,3072。使用循环当然可以但是我们这里使用递归的方法来完成。

package 递归;

public class rec2 {

	public static void main(String[] args) {
		rec2 rec2 = new rec2();
		rec2.fund(3);
	}
	
	public void fund(int i){
		if((i<<1)<5000) {  //左移位相当于*2
			System.out.print((i)+",");
		    fund(i<<1);
		}
		 else {
			  System.out.print((i));
			  return;
		}
	}

}


3、一个射击运动员打靶, 靶一共有 1环, 连开 10 枪打中 90 环的可能性有多少种?可以使用10

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值