递归算法解决因式分解(java版)

        最近在复习数据结构与算法相关的知识点,做了些些训练题,今天碰到了以前做过的因式分解的问题,以前用C写的,现在没什么印象了。今天重新用递归的方法完成了编写,对应做了些优化,希望对学习数据结构与算法的同学有帮助了,这次使用java实现的,不多说,上代码了。

public static void devide(int num){
		StringBuffer buffer = new StringBuffer() ;
		buffer.append(num+"=") ;
		devide(buffer,num,2) ;
		System.out.println(buffer.toString()) ;
	}
private static void devide(StringBuffer buffer,int num,int start){
		boolean flag = false ;
		int temp = num ;
		for(int i=start;i<=Math.sqrt(num);i++){
			if(num%i==0){
				buffer.append(i+"*") ;
				temp=num/i ;
				start=i ;
				flag = true ;
				break ;
			}
		}
		if(flag){
			devide(buffer,temp,start) ;//重新分解因式的的时候,开始的那个除数不应该是从2开始,而应该是上一次做整时的那个除数
		}else{
			buffer.append(temp) ;
		}
	}

       这里面编写了两个函数,真正实现因式分解的那个函数,权限被设置为了private,调用的那个函数为public,这样做的目的是隐藏因式分解算法的具体实现过程,在函数里面设置变量buffer,然后作为函数的形参,保存函数执行过程中所产生的因数。

       相对于以前的方法,devide(StringBuffer buffer,int num,int start)里面设置了start参数,这个参数是在因式分解开始的时候作为除数的值,有的实现方法里面直接将其设置为2,每次做判断的时候都是从2开始,显然这是没有必要的。例如:420=2*2*3*5*7,420/2/2/3=35,35再,35分解的时候里面不可能含有2的因式了吧,最少应该是从3开始的,就在这个地方稍微做了下改进。有不足的地方,请大家多多指正了。

devide(120)=2*2*2*3*5 ;

    原文作者:递归算法
    原文地址: https://blog.csdn.net/u012754897/article/details/26697525
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞