「遞迴函式」入門

2021-05-26 07:57:47 字數 1700 閱讀 3459

一、 函式即自呼叫函式,在函式體內部直接或間接地呼叫自己呼叫自己,即函式地巢狀呼叫地是函式本身。

例如,下面程式中的函式fact(int n)完成的功能就是求n!

#include "stdio.h"

#include "conio.h"

long fact(int n)

main()

①如果您看不懂上面的程式也不要緊,我這裡舉個例子,例如求3!,則第一次執行函式fact的時候,由於3不等於1,所以就執行return (fact(n-1))*n,也就是 return fact(2)*3;由於fact(2)是未知的,所以又呼叫fact(2)來求它的值;

②求fact(2)時,n=2,因為2不等於1,所以就執行return (fact(n-1))*n,也就是 return fact(1)*3;由於fact(1)是未知的,所以又呼叫fact(1)來求它的值;

③求fact(1)時,n=1,因為1不等於1,所以就執行return 1,所以fact(1)=1;

④因為fact(1)=1,所以第②步中的fact(1)*2也就等於2,所以fact(2)=2;

⑤因為fact(2)=2,所以第①步中的fact(2)*3也就能求出,它等於6;

⑥最終得出fact(3)=6。

二、 遞迴的條件

1、有使遞迴終止的條件,通常使乙個if判斷語句。

例如,上邊求n!的程式中,語句「if(n==1)」就是乙個遞迴終止條件,它的條件滿足使,將會終止遞迴的進行。

1、 乙個遞迴呼叫語句。

該遞迴呼叫語句應呼叫自身,而且函式引數應該逐漸逼近遞迴終止的條件。

例如,上邊的**中,「return (fact(n-1))*n;」就是乙個遞迴呼叫語句。它呼叫自身而且引數值在逐漸變小,這種引數變小的趨勢最終能使遞迴終止的條件「if(n==1)」滿足,從而終止遞迴的呼叫。

3、應先執行測試遞迴終止的條件是否滿足的測試**,再執行遞迴呼叫的**。

在遞迴函式的定義中,必須首先測試,後遞迴呼叫。也就是說,遞迴呼叫使有條件的,滿足了條件後,才可以遞迴。

例如,下面的**無條件的呼叫函式自己,造成無限制遞迴,形成了死迴圈。

long fact(int n)

三、如何快速正確的寫出遞迴函式。

從上面的條件來看,寫乙個遞迴函式是非常程式化的東西,只要按照一定的規則來寫,就可以很容易地寫出遞迴函式。寫遞迴函式有三步:

①寫出迭代公式;

②確定遞迴終止條件;

③將①②翻譯成**。

仍以求n!為例:

①寫出迭代公式:n!的迭代公式為

②確定遞迴終止條件:1!=1就是遞迴終止條件

③將①②翻譯成**:將迭代公式等號右邊的式子寫入return語句中,即return (fact(n-1))*n;

將1!=1翻譯成判斷語句:if(n==1) return 1;

按照先測試,後遞迴的原則寫出**。

long fact(int n)

下面再舉乙個例子,希望能幫助大家進一步體會這一原則

寫乙個函式,求:f(n)=1+2+3+……+n的值

①寫出迭代公式:迭代公式為 ②確定遞迴終止條件:f(1)=1就是遞迴終止條件

③將①②翻譯成**:將迭代公式等號右邊的式子寫入return語句中,即return (sum(n-1))+n;

將1!=1翻譯成判斷語句:if(n==1) return 1;

按照先測試,後遞迴的原則寫出**。

long sum(int n)

遞迴入門 階乘函式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!遞迴入門 對許多人而言,理解遞迴的最好方法是從簡單的數學函式開始。因為數學函式中遞迴結構直接能從問題的陳述中得到,並且可以很容易地看到。在這些數學函式中,最常見的就是階乘函式 在數學中的傳統表示為 n!它被定義為 1 到 n 之間的所有整數的連乘積...

遞迴入門 階乘函式

遞迴入門 對許多人而言,理解遞迴的最好方法是從簡單的數學函式開始。因為數學函式中遞迴結構直接能從問題的陳述中得到,並且可以很容易地看到。在這些數學函式中,最常見的就是階乘函式 在數學中的傳統表示為 n!它被定義為 1 到 n 之間的所有整數的連乘積。當然,此題的解法用迭代也能輕鬆解決 遞迴的作用在於...

js入門 6 函式,遞迴,閉包

函式宣告的提公升 第二種相當於提公升變數,所以不可以 函式優先提公升 arguments遇見ruturn會退出函式尋找喇叭花數 每一位階乘和等於他本身,尋找所有喇叭花數 可以寫乙個累乘的函式來實現 先寫乙個累乘的函式 function leicheng n 要有返回值!return x 拆分三位數,...