这篇文章主要介绍“PHP怎么计算给定数n的阶乘”,在日常操作中,相信很多人在PHP怎么计算给定数n的阶乘问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP怎么计算给定数n的阶乘”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一个正整数的阶乘(factorial)是指所有小于及等于该数的正整数的积。因此,给定整数N的阶乘就是指:
1 × 2 × 3×...× (n-1) × n
求阶乘很简单,是刚入门编程的同学一定会遇到的一个编程题,有多种实现方法。本文会给大家从for循环、while循环、do-while循环,以及递归角度来介绍多种实现阶乘的方法。
方法1:使用for循环实现N的阶乘
实现思想:
因为求n的阶乘,就是求1乘以2乘以3...一直乘到n的乘积。所以for循环的初始条件可设置为 i = 1
,限制条件可以是 i <= n
或者 i < n+1
。
然后循环体中的就是乘法运算了,将每次循环的 i 值相乘,得到一个乘积
最后输出乘积即可
下面看看实现方法:
<?php header("Content-type:text/html;charset=utf-8"); //第一种方法--for循环 function Factorial($n) { $sum = 1; for ($i = 1; $i <= $n; $i++) { $sum *= $i; } echo "$n 的阶乘为: " . $sum."<br><br>"; } Factorial(5); Factorial(10); Factorial(100); ?>
$sum *= $i
语句等价于$sum=$sum*$i
,*=
赋值运算符可以将运算符左边的变量乘以右边表达式的值赋给左边的变量。注意:因为0乘以任何值都是0,所以变量$sum的初始值要为1。
我们看看输出结果:
了解了for循环实现N的阶乘的方法,while循环和do-while循环的实现方法也就知道的差不多了(它们的实现思维是一样的)。
方法2:使用while循环实现N的阶乘
<?php header("Content-type:text/html;charset=utf-8"); //第二种方法--while循环 function Factorial($n) { $i = 1; $sum=1; while($i<=$n){ $sum*=$i; $i++; } echo "$n 的阶乘为: " . $sum."<br><br>"; } Factorial(1); Factorial(2); Factorial(3); Factorial(11); ?>
输出结果:
方法3:使用do-while循环实现N的阶乘
<?php header("Content-type:text/html;charset=utf-8"); //第三种方法--do while循环 function Factorial($n) { $i = 1; $sum=1; do { $sum *= $i; $i++; } while ($i <= $n); echo "$n 的阶乘为: " . $sum."<br><br>"; } Factorial(2); Factorial(3); Factorial(4); Factorial(10); ?>
输出结果:
对比一下,方法1、方法2和方法3,是不是发现它们很相似!
好了另一个重点来了,下面看看递归是如何实现N的阶乘的。
方法4:使用递归实现N的阶乘
那么递归是什么呢?简单来说,递归就是程序调用自身、函数不断引用自身,直到引用的对象已知。构成递归需满足以下两个条件:
子问题需与原始问题为同样的事,且更为简单。
不能无限制地调用本身,必须有一个出口,化简为非递归状况处理。
按照递归的思维,阶乘可以用如下的公式表示:
f(1) = 1 f(n) = n * f(n-1) {n>1}
因此,用 PHP 实现递归求N阶乘的代码如下:
<?php header("Content-type:text/html;charset=utf-8"); //第四种方法--递归 function Factorial($n) { $sum=1; if($n <= 1){ return 1; }else{ $sum = $n * factorial($n-1); return $sum; } } echo "2 的阶乘为: " .Factorial(2)."<br><br>"; echo "3 的阶乘为: " .Factorial(3)."<br><br>"; echo "4 的阶乘为: " .Factorial(4)."<br><br>"; echo "10 的阶乘为: " .Factorial(10); ?>
输出结果:
到此,关于“PHP怎么计算给定数n的阶乘”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。