若一個function自己呼叫自己,則我們稱這個function為recursive function

其中,recursive可以分為兩種

 

1. Direct recursion:  F1 -> F1 -> F1 -> ..... -> F1

 

2. Indirect recursion: F1 -> F2 -> F3 -> F1 -> F2 -> ... -> F3

 

在 recursive algorithm 中最最重要的是 boundary condition 否則會無限遞迴

 

例如說:

fact(n):

在 n = 0 時, 即 fact(0), 函數 return 1

此時,這個 function 的 boundary condition 就是在 n = 0 時

 

流程:

fact(2)

2! -> 2*1! -> 2*1*0! -> 2*1*1 -> 2*1 -> 2

 

multi(a, b):

a x b 可以看成 b 個 a 相加, 所以當 b 不等於 0 時, multi(a, b) 回傳 multi(a, b-1) + a

而當 b = 1 時, 只需回傳 a 即可

所以,multi(a, b)的 boundary condition 為 b = 1 時

 

流程:

multi(3, 4)

3*4 -> 3*3 + 3 -> 3*2 + 3 + 3 -> 3*1 + 3 +3 + 3 -> 3 + 3 + 3 + 3 -> 6 + 3 + 3 -> 9 + 3 -> 12

 

sum(n):   (Lec02)

sigma 1 to n = sigma 1 to n-1  + n

boundary condition 為 n = 1 時, 即 sum(1) = 1

 

流程:

sum(4)

sum(4) -> sum(3) + 4 -> sum(2) + 3 + 4 -> sum(1) + 2 + 3 + 4 -> 1 + 2 + 3 + 4 -> 3 + 3 + 4 -> 6 + 4 -> 10

 

binarySearch(arr[], target, left, right)

binarySearch 回傳值可分為3種情形

1. target > arr[middle]        return bin...(arr, target, middle+1, right)

2. target = arr[middle]        return arr[middle]     //found!!

3.  target < arr[middle]       return bin...(arr, target, left, middle-1)

 

boundary condition: 當 left > right 時 return 0   // not found QQ

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大神(偽) 的頭像
    大神(偽)

    大神的世界

    大神(偽) 發表在 痞客邦 留言(0) 人氣()