Java的递归算法

递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到可以直接求解,也就是说到了递推的出口,这样原问题就有递推得解。
关键要抓住的是:
(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);

转载于:https://www.cnblogs.com/zfyouxi/p/3872678.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python list遍历定位元素_python for循环,第二遍定位不到元素?

ycyzharry: 也不行&#xff0c;我的代码import unittestimport timeimport xlrdfrom selenium import webdriverimport seleniumdef open_excel(filefile.xls):try:data xlrd.open_workbook(file)return dataexcept Exception as e:print(str(e))def excel_table_byindex(file…

发现Java程序中的Bug

昨天在CSDN上阅读 "Java中十个常见的违规编码"这篇文章时&#xff0c;无意中找到了3个 "发现Java程序中的Bug"工具。 文章地址&#xff1a;http://www.csdn.net/article/2012-09-11/2809829-common-code-violations-in-java其中&#xff0c; FindBugs™ - …

原生php登录注册,原生php登陆注册

本以为一个登陆注册功能十来分钟就写好了&#xff0c;没想到thinkPHP用久了&#xff0c;原生的php不会写了最开始我直接写了类和方法&#xff0c;在前台传递参数给类的login方法(action"index.php/login"),尝试几次发现无法访问&#xff0c;这才意识到&#xff0c;这…

SpringMVC REST 风格静态资源访问配置

1 在web.xml中使用默认servlet处理静态资源&#xff0c;缺点是如果静态资源过多&#xff0c;则配置量会比较大&#xff0c;一旦有遗漏&#xff0c;则会造成资源无法正常显示或404错误。 <!-- 静态资源访问控制 --><servlet-mapping><servlet-name>default<…

生成对象

var c[name,age,city]; var d[xiaogang,12,anhui]; var a{}; for(var i0;i<3;i){a[c[i]]d[i]; } console.log(a); //返回 {name: "xiaogang", age: "12", city: "anhui"} 转载于:https://www.cnblogs.com/xiaozhumaopao/p/6046823.html

3.寄存器(内存访问)

CPU中&#xff0c;用16位来存储一个字。高8位存放高位字节&#xff0c;低8位存放低位字节。内存存储中&#xff0c;内存单元是字节单元&#xff08;1单元1字节&#xff09;&#xff0c;则一个字要用两个地址连续的内存单元存放。内存存储中&#xff0c;高位字节&#xff0c;和低…

shiro前后端分离_为什么要前后端分离?前后端分离的优点是什么?

随着互联网的高速发展以及IT开发技术的升级&#xff0c;前后端分离已成为互联网项目开发的业界标准使用方式。在实际工作中&#xff0c;前后端的接口联调对接工作量占HTML5大前端人员日常工作的30%-50%&#xff0c;甚至会更高。接下来千锋小编分享的广州HTML5大前端学习就给大家…

POJ 2152 Fire

算是我的第一个树形DP 的题&#xff1a; 题目意思&#xff1a;N个城市形成树状结构。现在建立一些消防站在某些城市&#xff1b;每个城市有两个树形cost&#xff08;在这个城市建立消防站的花费&#xff09;&#xff0c;limit &#xff1b; 我们要是每个城镇都是安全的&#xf…

php 解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别

GET&#xff1a; 请求指定的页面信息&#xff0c;并返回实体主体。HEAD&#xff1a; 只请求页面的首部。POST&#xff1a; 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。PUT&#xff1a; 从客户端向服务器传送的数据取代指定的文档的内容。DELETE&#xff1a; …

python的socket连接不上_Python套接字只允许一个连接,但在新的连接上断开,而不是拒绝...

我不确定我完全理解你的问题&#xff0c;但我认为下面的例子可以满足你的要求。服务器可以断开旧用户的连接&#xff0c;为新用户提供服务。在服务器端&#xff1a;#!/usr/bin/env pythonimport socketimport multiprocessingHOST 127.0.0.1PORT 50007# you can do your real…

dede搜索php在哪,dede搜索页面怎么调用及相关搜索调用

dede搜索页面怎么调用&#xff0c;那几天有事情&#xff0c;所以导致博客几天都一直没有更新&#xff0c;之前我们讲过dede内容页面和dede列表模板的调用&#xff0c;今天我们一起来学习下搜索页面的调用&#xff0c;很多做企业站朋友们都不知道dede的搜索页怎么仿&#xff0c;…

电脑中病毒后被隐藏的文件的显示

用批处理或DOS更改属性。批处理就是建个记事本&#xff0c;输入attrib -h -s -r %~dp0\*.* /s /d&#xff0c;然后另存为随便.bat&#xff0c;把它放到那些隐藏文件夹外面&#xff08;不是里面&#xff09;&#xff0c;然后双击打开&#xff0c;等它自己关闭窗口就好了转载于:h…

HDU 3555 - Bomb

第一道数位dp&#xff0c;属于基础模板&#xff0c;又自卑小时没学好数数了&#xff0c;只是不清楚为什么大家的dp定义都是相同的&#xff0c;很显然么&#xff0c;难道我写的是怪胎。。。 /* ID:esxgx1 LANG:C PROG:hdu3555 */ #include <cstdio> #include <cstring&…

浏览器angent分析工具

cz.mallat.uasparser.UserAgentInfo info null; info uasParser.parse(userAgent);转载于:https://www.cnblogs.com/yaohaitao/p/6048011.html

python2协程_python中的协程(二)

协程1、协程&#xff1a;单线程实现并发在应用程序里控制多个任务的切换保存状态优点&#xff1a;应用程序级别速度要远远高于操作系统的切换缺点&#xff1a;多个任务一旦有一个阻塞没有切&#xff0c;整个线程都阻塞在原地&#xff0c;该线程内的其他的任务都不能执行了一旦引…

python相减函数subs,SUBS(subs是什么函数)

matlab中subs()是符号计算函数&#xff0c;详细用法可以在Matlab的Command Windows输入&#xff1a;help subs。subs()函数表示将符号表达式中的某些符号变量替换为指定的新的变.f1subs(f,t,t3); f2subs(f1,t,2*t); f3subs(f2,t,-t); subplot(2,2,1);ezplot(f,[-8,8]);。subs是…

hdu--1075--字典树||map

做这题的时候 我完全没想到 字典树 就直接用map来做了 - 我是有 多不 敏感啊~~ 然后去 discuss 一看 很多都是说 字典树的问题.... 字典树 给我感觉 它的各个操作的意思都很清晰明了 直接手写 不那么容易啊。。 晚些 时候 试下来写------用map写是真心方便 只要注意下那么\n的吸…

归档七

课后作业1 运行 TestInherits.java &#xff0c;观察输出&#xff0c;总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码&#xff0c;调用GrandParent的另一个构造函数。 class Grandparent { public Grandparent() { System.out.println("GrandParent Creat…

php的类装载的步骤,设计PHP自动类装载功能

在使用面向对象方法做PHP开发时&#xff0c;可能会经常使用到各个路径中的类文件&#xff0c;这就需要大量的 include 或 require&#xff0c;而 PHP 提供了一个比较快捷的方式&#xff0c;就是利用函数 __autoload 可以编程实现动态的类装载功能&#xff0c;这样就不需要手动的…

python 重定向 ctf_3.CTF——python利用工具

web AWD 攻与防CTF线下赛主要考察代码审计能力及运维能力&#xff0c;代码审计发现漏洞&#xff0c;python写利用漏洞&#xff0c;运维发现可疑攻击目标&#xff0c;异常流量&#xff0c;异常权限&#xff0c;重要业务备份与还原。用运维的知识加固系统与业务。当被人攻击以后&…