分解因式公式JAVA_递归算法解决因式分解(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 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值