阿摩線上測驗 登入

申論題資訊

試卷:109年 - 109 中央印製廠_新進人員甄試_資訊管理員:程式設計概論#88054
科目:程式設計
年份:109年
排序:0

申論題內容

肆、請自選一種程式語言,以計算階乘(n! = 1*2*3*…*n-1*n)為目的,分別設計一個遞迴函式(recursive function)與一個非遞迴函式(non-recursive function),並比較其優缺點。

詳解 (共 2 筆)

詳解 提供者:aabb177

非遞迴

int re(int n){

int count;

if (n>0){

count=1;

}else{

count=0;

}

while (n!=0){

count*=n;

n--;

}

system.out.println(count);

}



遞迴

int nonre(int n){

int count=1;

if (n==0){

return 0;

}else if(n==1){

return count;

}else{

count*=n;

return count*nonre(n-1);

}

}

詳解 提供者:hchungw
遞迴函式(Recursive Function)
python

def factorial_recursive(n):
    if n == 0:
        return 1
    else:
        return n * factorial_recursive(n-1)
非遞迴函式(Non-Recursive Function)
python
Copy code
def factorial_non_recursive(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result
優缺點比較
遞迴函式優點:
簡潔性:遞迴函式通常在代碼上更為簡潔,更容易理解,特別是對於那些自然遞迴的問題,如階乘計算。
直觀性:遞迴方法直接反映了數學定義,因此對於理解算法的數學背景非常有幫助。
遞迴函式缺點:
性能問題:每次函式調用時,都需要在記憶體棧(Call Stack)中分配空間以保存調用信息,如果遞迴深度過大,可能導致棧溢出。
效率低下:對於某些問題,遞迴方法可能會重複計算相同的子問題,導致不必要的計算開銷。
非遞迴函式優點:
效率:非遞迴函式通常在效率上優於遞迴函式,特別是當問題規模較大時,因為它避免了重複的函式調用開銷和棧空間的分配。
無棧溢出風險:非遞迴實現不會因為遞迴深度過大而導致棧溢出的風險。
非遞迴函式缺點:
代碼可能較為複雜:對於一些自然遞迴的問題,使用非遞迴方式實現可能會使代碼變得較為複雜,不如遞迴方式直觀。
總結來說,選擇遞迴或非遞迴取決於具體的問題和實現的需求。對於較為簡單的階乘計算,兩者差異不大,但在需要考慮效率和遞迴深度限制的情況下,選擇最合適的實現方式顯得尤為重要。