函式遞迴(例項)

2021-10-22 20:20:10 字數 2189 閱讀 8161

遞迴:函式自己呼叫自己

函式一旦進入遞迴,可能需要很多次呼叫才能遞迴結束。(呼叫關係會非常複雜)

由於是同乙個函式呼叫自己,每次呼叫執行的**都很相似,涉及到的區域性變數的名字也都一樣,就會特別容易讓人混淆。

先舉乙個簡單的例子:

求n的階乘

**如下(示例):

#include

#include

//這是求階乘的普通做法

intfactor

(int n)

return result;

}int

main()

這是求階乘的遞迴做法

注意:函式呼叫過程中,引數都叫n,雖然名字相同,但是是完全不同的變數,一定要結合具體的呼叫層數,來確定當前n的值是幾。

例項2:

接受乙個整型值(無符號),按照順序列印它的每一位。

例如:輸入:1234

輸出:1 2 3 4

解題思路:

如何取出整數的每一位?

1234%10=>4

1234/10=>123

123%10=>3

123/10=>12

12%10=>2

12/10=>1

1%10=>1

思路:針對整數對10求餘數,求出的結果就是個位,然後再/=10,再迴圈的對10求餘數。

如果按照上面的過程來取,結果是4 3 2 1,是反著的。使用遞迴就可以很方便的解決這個問題。

**如下(示例):

#include

#include

void

printnum

(int n)

printf

("%d\n"

,n %10)

;}intmain()

例項3:編寫函式不允許建立臨時變數,求字串長度。

求字串長度的思路就是,從前往後遍歷字元陣列,每次讀取到乙個字元就count++,遇到』\0』就迴圈結束

**如下(示例):

/這是非遞迴的做法/

#include

#include

intstrlen

(char str)

return count;

}int

main()

/遞迴版本求字串長度(沒有臨時變數)/

int

strlen

(char str)

return1+

strlen

(str +1)

;}

例項4:求第n個斐波那契數。

#include

#include

intfib

(int n)

if(n ==2)

return

fib(n -1)

+fib

(n -2)

;}intmain()

剛剛發現fib(40),算了一會還是算出來了,fib(50)算了半天還沒算出來。

原因就是fib(50)的計算量遠遠大於fib(40)的計算量。計算量大的原因是進行了大量的重複計算。此處採取的優化辦法,不使用遞迴,就是用單純的迴圈來計算。

int

fib(

int n)

if(n ==2)

//接下來直接使用迴圈來計算

//這兩變數分別表示第i-1項和第i-2項

int last1 =1;

int last2 =1;

//此處cur表示當前的第i項

int cur =0;

for(

int i =

3; i <= n; i++

)}

python遞迴函式例項 python遞迴函式

python遞迴函式 什麼是遞迴?遞迴,就是在函式執行中自己呼叫自己 示例 def recursion n 定義遞迴函式 print n 列印n recursion n 1 在函式的執行種呼叫遞迴 recursion 1 呼叫函式 這個函式在不斷的自己呼叫自己,每次呼叫n 1,看下執行結果 998t...

php遞迴函式及簡單例項講解

遞迴函式即自呼叫函式,在函式體內部直接或者間接的自己呼叫自己,即函式的巢狀呼叫是函式本身。通常在此型別的函式提之中會附加乙個條件判斷敘述,以判斷是否需要執行遞迴呼叫,並且在特定的條件下終止函式的遞迴呼叫動作,把目前流程的主控權交回到上一層函式來執行。以此,當某個執行遞迴呼叫的函式沒有附加條件判斷敘述...

遞迴演算法例項

如 求1 2 3 4 n 1.方法 public static int operation int n 注意返回值和引數 2.根據提議,當值為1時表示不再遞迴,那麼此處定義為程式出口,即 if n 1 如果未到達出口,那麼進行遞迴運算 else if n 1 這裡注意的地方有 operation n...