博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java的递归算法
阅读量:7042 次
发布时间:2019-06-28

本文共 2167 字,大约阅读时间需要 7 分钟。

递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到可以直接求解,也就是说到了递推的出口,这样原问题就有递推得解。
关键要抓住的是:
(1)递归出口
(2)地推逐步向出口逼近
样例:
example: 求5的阶乘。。      
  
例如以下:   
  
Java代码
  1. public class Test {         
  2. static int multiply(int n){         
  3. if(n==1||n==0)         
  4. return n;         
  5. else         
  6. return n*multiply(n-1);         
  7. }         
  8.       
  9. public static void main(String[] args){         
  10. System.out.println(multiply(10));         
  11. }         
  12. }      
public class Test {      static int multiply(int n){      if(n==1||n==0)      return n;      else      return n*multiply(n-1);      }         public static void main(String[] args){      System.out.println(multiply(10));      }      }
  
  
上面的multiply是一个阶乘的样例。事实上递归递归,从字面上解释就是在方法本身调用自己的方法,或者间接调用;看上面的程序,拿multiply(5)来说:   
n=5;运行 5*multiply(4);   
--------------------   
这时候看multiply(4)   
n=4 运行 4*multiply(3);   
-------------------   
看multiply(3)   
n=3,运行 3*multiply(2);   
---------------   
mulitply(2);   
n=2 运行 2*mulitply(1);   
这时候,return 1;往上返回   
2*1向上返回   
3*(2*1)向上返回   
4*(3*(2*1)) 向上返回   
5*(4*(3*(2*1)) ) = 120   
所以程序输出120;   
这事简单的递归的样例;所以能够看出来递归的关键得有递归出口(本体的If语句),还有递归方法;   
下面是我在百度知道碰到一个朋友的提问,也是关于递归算法的:
------------------------问题------------------------------
本人刚学JAVA,没有不论什么编程基础,各位高手见笑。
Java代码
  1. public class Count   
  2. {   
  3.     static void count(int n)               //递归方法   
  4.     {   
  5.         if (n<5)    
  6.             count(n+1);    
  7.         System.out.print("     "+n);   
  8.     }    
  9.     public static void main(String args[])   
  10.     {   
  11.         count(1);   
  12.         System.out.println();   
  13.     }   
  14. }  
public class Count{    static void count(int n)               //递归方法    {        if (n<5)             count(n+1);         System.out.print("     "+n);    }     public static void main(String args[])    {        count(1);        System.out.println();    }}
请具体解说这段程序是怎么运行的,我的理解是先运行main函数里的count(1),然后进入count方法,N值为1,所以运行IF语句,直到count(5),此时退出if 循环,打印N=5 ,然后应该没有要运行的东西了,但是答案是5     4     3     2     1 ,请问这是怎么回事,谢谢!
--------------------回答---------------------------
先运行count(1),然后进入count方法,N值为1,所以运行IF语句,也就是运行count(2),然后进入count方法,N值为2,所以运行IF语句,也就是运行count(3),然后进入count方法,N值为3,所以运行IF语句,也就是运行count(4),然后进入count方法,N值为4,所以运行IF语句,也就是运行count(5),然后进入count方法,N值为5,所以不运行IF语句,然后运行System.out.print(" "+n); 也就是输出5,然后本次參数为5的count方法调用结束了,返回到调用它的參数为4的count方法中,然后运行System.out.print(" "+n);输出4,然后一直这样下去,输出3,2,1 。这里须要说明的是在运行count(5)的时候,count(4)、count(3)、count(2)、count(1)都没有运行完成,他们都在等自己方法体中的count(n+1)运行完成,然后再运行System.out.print(" "+n);

转载地址:http://xvqal.baihongyu.com/

你可能感兴趣的文章
ArchSummit北京2015 | “新人”的技术约战
查看>>
Microsoft宣布正式发布Linux on ASE
查看>>
Elm提供的语言级响应性
查看>>
微服务通信策略
查看>>
InfoQ 趋势报告:技术文化\u0026方法2019年实践状况
查看>>
Entity Framework Core 2.0的槽点
查看>>
甲骨文解散Java Mission Control团队事件新进展
查看>>
书评:实战Apache JMeter
查看>>
2014年基于Raspberry Pi的5大项目
查看>>
[deviceone开发]-openPage的动画效果示例
查看>>
EAGLEPCB7.7 gerber文件导出
查看>>
苏宁11.11:苏宁易购移动端的架构优化实践
查看>>
GitHub推出Scientist,帮助开发者重构关键路径代码
查看>>
力荐!这些工具可以帮你写出干净的代码
查看>>
优化typecho性能,使typecho可以流畅支持200w posts
查看>>
UITableView基础[ 3 ] 使用UIRefreshControl实现下拉刷新功能
查看>>
el-admin v1.7 发布,后台管理系统
查看>>
JFinal 开发的内容管理系统 JFinalCMS 1.0 发布
查看>>
Gitea Extension for Visual Studio V1.0.62 发布
查看>>
PHP7 的抽象语法树(AST)带来的变化
查看>>