求一個自然數n的階乘,也非常適合用遞歸的方式實現。當然,所有的遞歸都可以用非遞歸的方式來實現,只是在代碼結構上將顯得啰嗦和復雜。現代編譯器對遞歸函數的調用開銷已經大幅優化,因此,對於類似漢諾塔等問題的求解,用遞歸實現非常簡潔明了,並且易於閱讀和理解。
本文給出自然數n的階乘的遞歸與非遞歸求解算法代碼實現。語言為dart語言。
1 int factorial(int n) { 2 if (n < 0) throw StateError('n cannot be < 0!'); 3 return n == 0 ? 1 : n * factorial(n - 1); 4 } 5
6 int factorialNonrecursive(int n) { 7 if (n < 0) throw StateError('n cannot be < 0!'); 8 var result = 1; 9 while (n > 0) result *= n--; 10 return result; 11 }