導航:首頁 > 創造發明 > 遞歸是誰發明的

遞歸是誰發明的

發布時間:2021-08-12 01:11:58

㈠ 遞歸是什麼

遞歸是一種重要的編程技術。該方法用於讓一個函數從其內部調用其自身。一個示例就是計算階乘。0 的階乘被特別地定義為 1。 更大數的階乘是通過計算 1 * 2 * ...來求得的,每次增加 1,直至達到要計算其階乘的那個數。

下面的段落是用文字定義的計算階乘的一個函數。

「如果這個數小於零,則拒絕接收。如果不是一個整數,則將其向下舍入為相鄰的整數。如果這個數為 0,則其階乘為 1。如果這個數大於 0,則將其與相鄰較小的數的階乘相乘。」

要計算任何大於 0 的數的階乘,至少需要計算一個其他數的階乘。用來實現這個功能的函數就是已經位於其中的函數;該函數在執行當前的這個數之前,必須調用它本身來計算相鄰的較小數的階乘。這就是一個遞歸示例。

遞歸和迭代(循環)是密切相關的 — 能用遞歸處理的演算法也都可以採用迭代,反之亦然。確定的演算法通常可以用幾種方法實現,您只需選擇最自然貼切的方法,或者您覺得用起來最輕松的一種即可。

顯然,這樣有可能會出現問題。可以很容易地創建一個遞歸函數,但該函數不能得到一個確定的結果,並且不能達到一個終點。這樣的遞歸將導致計算機執行一個「無限」循環。下面就是一個示例:在計算階乘的文字描述中遺漏了第一條規則(對負數的處理) ,並試圖計算任何負數的階乘。這將導致失敗,因為按順序計算 -24 的階乘時,首先不得不計算 -25 的階乘;然而這樣又不得不計算 -26 的階乘;如此繼續。很明顯,這樣永遠也不會到達一個終止點。

因此在設計遞歸函數時應特別仔細。如果懷疑其中存在著無限遞歸的可能,則可以讓該函數記錄它調用自身的次數。如果該函數調用自身的次數太多,即使您已決定了它應調用多少次,就自動退出。

下面仍然是階乘函數�獯問怯?JScript 代碼編寫的。

// 計算階乘的函數。如果傳遞了
// 無效的數值(例如小於零),
// 將返回 -1,表明發生了錯誤。若數值有效,
// 把數值轉換為最相近的整數,並
// 返回階乘。
function factorial(aNumber) {
aNumber = Math.floor(aNumber); // 如果這個數不是一個整數,則向下舍入。
if (aNumber < 0) { // 如果這個數小於 0,拒絕接收。
return -1;
}
if (aNumber == 0) { // 如果為 0,則其階乘為 1。
return 1;
}
else return (aNumber * factorial(aNumber - 1)); // 否則,遞歸直至完成。

㈡ 遞歸是什麼

遞歸就是有遞有歸

簡單來說就是程序或者函數自己調用自己,以此來將問題簡化

㈢ java中的遞歸到底是什麼來的啊 本人初學的 要多的簡單的例子啊 沒有不給分

遞歸就是直接或者間接對自身進行調用。。

1.先想參數
2.遞歸的條件
3.遞歸的邊界

以後遇到遞歸題,就從這三個方面思考..容易些。
順便 給你一道楊輝三角形的題。。
/***************************************************

* 利用遞歸輸出楊輝三角

***************************************************/
public class YangHui
{
public static void main(String args[])
{
int hang=0;//行數
int dangQian = 0;//每行的當前數
for(;hang<=9;hang++)
{
for(dangQian=0;dangQian<=hang;dangQian++)
System.out.print(num(hang,dangQian)+"\t");
System.out.println();
}

}

/*
思想:
1.由觀察可以得到兩邊的元素值為1,即(dangQian == n ||dangqian == 1)=1。
2.num(hang,dangQian)=num(hang-1,dangQian-1)+num(hang-1,dangQian)
*/
static long num(int _hang,int _dangQian)
{
if(_dangQian<=0||_dangQian>=_hang)
return 1;
return(num(_hang-1,_dangQian)+num(_hang-1,_dangQian-1));
}
}

㈣ 黃金分割點的發現者是誰

樓上不懂不要亂說

發現者是裴波那契,就是那個「遞歸序列」1、1、2、3、5、8、13、21………………,每個數與前面的數的比值越來越接近1.618……

黃金分割的表示方法是(1+√5)/2

不懂用HI找我

㈤ 關於遞歸

遞歸在內存中就是進棧出棧的問題。你找一下C語言的教材,一般都會提到遞歸具體過程。
另外棧的原理是先進後出,後進先出,根據這個原則,分析如下:
當主函數執行move(9)就調用move這個函數,由於move(9)一下子得不到確切的值,就只能進棧,然後計算move(8),又進棧,如此重復下去一直到move(1),此時得到1;於是move(1)開始出棧,輸出1,然後move(2)出棧,又輸出2,如此重復到move(9),輸出9。
進棧:move(9)->move(8)->...move(1)
出棧:move(1)->move(2)->...move(9)
所以最後就是輸出1 2 3 4 5 6 7 8 9

㈥ 遞歸的原理解釋

遞歸的底層實現其實是一個棧.棧的特點是後進先出,也就是最後進入棧的事件是最先被處理的.
遞歸就是這樣運作.比如計算階乘函數F(n)=n!=n*F(n-1)=....
寫成遞歸,我用java
public static long F(long num){
if(num<=1)
return 1;
return F(num-1)*num;
}
static public void main(String argv[]){
System.out.println(F(5));
}:
第一次計算的時候是F(num),進入之後會直接return F(num-1)*num.也就是把這一項入棧.
然後這一項到底是多少還不知道需要繼續計算.
第二次遞歸就是 F(num-1-1)*(num-1).入棧.
直到滿足num<=1.計算出最後入棧的F(1)=1;return這句就限定了最終棧的大小.
然後開始出棧.第一個出棧的是F(1);已經計算得出是1;
第二個出棧是F(2).由F(1)可以得知F(2).
這樣直到棧空,階乘也就計算出來了.

遞歸的內部是棧實現的.理解了這個,你也可以自己寫非遞歸的遞歸,也就是用棧實現的遞歸.

㈦ 遞歸論的歷史

遞歸論這門學科最早可以追溯到原始遞歸式的使用。古代人以及現代的兒童對加法及乘法的理解,實質上就是使用原始遞歸式。但直到17世紀,法國學者B.巴斯加爾才正式使用與遞歸式密切相關的數學歸納法。19世紀德國數學家R.戴德金德和義大利的G.皮亞諾正式使用原始遞歸式,以定義加法與乘法,從而發展了整個自然數論。1923年,T.司寇倫提出並初步證明一切初等數論中的函數都可以由原始遞歸式作出,即都是原始遞歸函數。1931年,K.哥德爾在證明其著名的不完全性定理時,以原始遞歸式為主要工具把所有元數學的概念都算術化了。原始遞歸函數的重要性遂受到人們的重視,人們開始猜測,原始遞歸函數可能窮盡一切可計算的函數。但是,德國數學家W.阿克曼的非原始遞歸的可計算函數的出現,否定了這個猜測,同時也要求人們探討原始遞歸函數以外的可計算函數。1934年,哥德爾在J.赫爾布蘭德的啟示之下,提出了一般遞歸函數的定義;美國的S.C.克利尼則於1936年證明了這樣定義的一般遞歸函數和A.丘奇所定義的λ可定義函數是相同的,並給出了幾種相等價的定義。這樣的一般遞歸函數後來被稱為赫爾布蘭德-哥德爾-克利尼定義。1936年,丘奇、A.M.圖林各自獨立地提出一個論點,即凡可計算的函數都是一般遞歸函數,這就把遞歸函數論與能行性論緊緊地結合起來,從而使遞歸函數的應用范圍大大地擴展了(見能行性與一般遞歸)。關於遞歸函數本身的進展主要在於定義域的推廣,從而得到遞歸字函數、a遞歸函數和遞歸泛涵等等。

㈧ 什麼是遞歸

程序調用自身就叫做遞歸。
遞歸一般用來算一些比較麻煩的演算法問題。
遞歸跟循環的區別,循環注重過程,而遞歸值注重結果。
簡單的來說就是:用循環能實現的,遞歸一般可以實現,但是能用遞歸實現的,循環不一定能。因為有些題目①只注重循環的結束條件和循環過程,而往往這個結束條件不易表達(也就是說用循環並不好寫);②只注重循環的次數而不注重循環的開始條件和結束條件(這個循環更加無從下手了)。
要想理解遞歸一時半會也弄不明白。但是寫遞歸需要記住三個步驟。
1.首先去找臨界值,即無需計算,獲得的值。
2. 找這一次和上一次的關系
3. 假設當前函數已經可以使用,調用自身計算上一次和這一次的關系。

㈨ 什麼是遞歸

遞歸,就是在運行的過程中調用自己。構成遞歸需具備的條件:1. 子問題須與原始問題為同樣的事,且更為簡單;2. 不能無限制地調用本身,須有個出口,化簡為非遞歸狀況處理。在數學和計算機科學中,遞歸指由一種(或多種)簡單的基本情況定義的一類對象或方法,並規定其他所有情況都能被還原為其基本情況。例如,下列為某人祖先的遞歸定義:某人的雙親是他的祖先(基本情況)。某人祖先的雙親同樣是某人的祖先(遞歸步驟)。斐波納契數列(Fibonacci Sequence),又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21..... I[1] 斐波納契數列是典型的遞歸案例:遞歸關系就是實體自己和自己建立關系。Fib(0) = 1 [基本情況] Fib(1) = 1 [基本情況] 對所有n > 1的整數:Fib(n) = (Fib(n-1) + Fib(n-2)) [遞歸定義] 盡管有許多數學函數均可以遞歸表示,但在實際應用中,遞歸定義的高開銷往往會讓人望而卻步。例如:階乘(1) = 1 [基本情況] 對所有n > 1的整數:階乘(n) = (n * 階乘(n-1)) [遞歸定義] 一種便於理解的心理模型,是認為遞歸定義對對象的定義是按照「先前定義的」同類對象來定義的。例如:你怎樣才能移動100個箱子?答案:你首先移動一個箱子,並記下它移動到的位置,然後再去解決較小的問題:你怎樣才能移動99個箱子?最終,你的問題將變為怎樣移動一個箱子,而這時你已經知道該怎麼做的。如此的定義在數學中十分常見。例如,集合論對自然數的正式定義是:1是一個自然數,每個自然數都有一個後繼,這一個後繼也是自然數。

㈩ 遞歸是怎麼一回事哪位老師能否通俗易懂的講講原理

遞歸通俗的講就是一個函數在其代碼中反復調用自身。你應該知道菲波納契數列,這個數列的定義是

f(x)=1 (x=1)
f(x)=2 (x=2)
f(x)=f(x-1)+f(x-2) (x>2)
也就是說從第三項開始的每一項的值都等於是前兩項之和。這在數學中叫遞推數列--高中數學內容。
如果把它變為一個要求第n個菲波納契數的代碼的話,應該如下所示(為了避免語言不通:)我使用偽代碼):

int f(int step)
在這里x為上面所說的x變數,也就是要求的是第x項的值
{
if step=1
{
return 1
}
else if step=2
{
return 2
}
如果求得是第一項和第二項的話,就分別返回1和2,並退出函數

return f(x-1)+f(x-2)
否則的話就返回前面兩項的和
}

這里的關鍵是最後一句。這里函數的返回直又要反過去調用它自身計算前面兩項的值,這樣就會反復調用,直到x變數在某次調用中變為1和2,返回已知的第一項和第二項的值,在層層返回,最後得出要求的第x項的值

說到本質的話,遞歸是一段程序的代碼反復效用,把程序的參數等變數保存在一個堆棧里,直到到了邊界條件以後再層層返回,將堆棧中的數據彈出計算,最後得到結果

閱讀全文

與遞歸是誰發明的相關的資料

熱點內容
西安私人二手挖機轉讓 瀏覽:698
債務股權轉讓 瀏覽:441
食堂轉讓合同範本 瀏覽:335
廣西華航投資糾紛 瀏覽:902
萌分期投訴 瀏覽:832
金軟pdf期限破解 瀏覽:730
馬鞍山學化妝 瀏覽:41
膠州工商局姜志剛 瀏覽:786
了解到的發明創造的事例 瀏覽:391
2012年中國知識產權發展狀況 瀏覽:773
合肥徽之皇知識產權代理有限公司 瀏覽:636
天津企興知識產權待遇 瀏覽:31
二項基本公共衛生服務項目試題 瀏覽:305
基本公共衛生服務考核標准 瀏覽:543
公共衛生服務考核評估辦法 瀏覽:677
上海工商局咨詢熱線 瀏覽:177
馬鞍山二中葉張平 瀏覽:214
機動車交通事故責任糾紛被告代理詞 瀏覽:603
醫院固定資產折舊年限 瀏覽:702
商標注冊網先咨政岳知識產權放心 瀏覽:658