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];

………

}















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