递归算法之阶乘代码实现与非递归实现


  求一个自然数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 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM