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.pswp.cn/news/260192.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260192.shtml
英文地址,請注明出處:http://en.pswp.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;重要業務備份與還原。用運維的知識加固系統與業務。當被人攻擊以后&…