java算法学习笔记--递归算法/分而治之思想

1递归算法思想本质

在程序中不断反复的调用自身来达到求解问题。

2递归算法分类

直接递归:在方法中调用方法本身;间接调用:间接的调用一个方法。

3例子--递归算法

有阶乘 就是1到N的所有自然数相乘的结果,n的阶乘为

n!=n*(n-1)*(n-2).....*2*1;

对于(n-1)则有如下表达式

(n-1)!=(n-1)*(n-2)*...*2*1;

可以推出N!=n*(n-1)!

java代码表示

long fact(int n){

if(n<=1)

return 1;

else

return n*fact(n-1);

}

<---------------------------------------->

4分而治之的适用范围

应用于计算步骤比较复杂的问题,通过将问题简化而逐步得到结果。

5分而治之的步骤

将该问题分解成m个问题,且问题互相独立:递归的解决这些子问题:合并得到原问题的解;

6例子--区分假币

袋子里有30个硬币,其中一个是假币,假币比真币轻一点,如何区分

java代码如下

int falsecoin(int coin[],int low,int high){

int i,sum1,sum2,sum3;

int re=0;

sum1=sum2=sum3=0;

if(low+1=high)

{

if(coin[low<coin[high])

{

re=low+1;

return re;

}

}

if(high-low+1)%2==0)

{

for(i=low;i<low+(high-low)/2;i++)

{

sum1=sum1+coin[i];

}

for(i=low+(high-low)/2+1;i<=high;i++)

{

sum1=sum1+coin[i];

}

for(i=low+(high-low)/2+1;i<=high;i++)

{

sum2=sum2+coin[i];

}

if(sum1>sum2)

{

fr=falsecoin(coin,low+(high-low)/2+1,high);

return re;

}

else if(sum1<sum2)

{

re=falsecoin(coin,low,low+(high-low)/2;

return re;

}

else

{

}

}

esle

{

for(i=low;i<=low+(high-low)/2-1;i++)

{

sum1=sum1+coin[i];

}

for(i=low+(high-low)/2+1;i<=high;i++)

{

sum2=sum2+coin[i];

}

sum3=coin[low+(high-low)/2];

.........

}















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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值