我喜欢递归.我认为它简化了很多事情.另一个可能不同意; 我认为这也使代码更容易阅读.但是,我注意到递归在C#等语言中并没有像在LISP中那样被使用(顺便提一下,这是我最喜欢的语言).
有没有人知道是否有任何好的理由不使用C#等语言的递归?它比迭代更昂贵吗?
迭代因子函数:
function factorial($number) {
$result = 1;
while ($number > 0) {
$result *= $number;
$number--;
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
递归阶乘函数:
function factorial($number) {
if ($number < 2) {
return 1;
} else {
return ($number * factorial($number-1));
}
}
Run Code Online (Sandbox Code Playgroud)
我必须开发一个函数来计算我的PHP程序中的factorial.我想通了我可以在两个方面做到这一点.
我知道这是很多问题,但因为我是PHP新手,希望有人能帮助我.
鉴于此,实际上我使用的功能不仅仅是阶乘.它还有一些其他线路可以执行其他任务.为简化起见,我们假设这些是两个函数.所以任何人都可以理解我的问题,而不是无缘无故地复杂化.
我基本上指的是PHP中的递归与迭代.
在我的大学里,我被要求为Fibonacci系列写一个JAVA程序.我使用递归来编写该程序.
但是,助理讲师说我的算法效率不高,并要求我分析.他补充说,按照惯例,迭代适用于该程序而不是递归.
如何分析我们的算法?如何在迭代和递归中检查空间和时间复杂度?就在这时,我发现这些东西和程序的正确性一样重要.
如果我必须生成自然数,我可以使用“范围”,如下所示:
list(range(5))
Run Code Online (Sandbox Code Playgroud)
[0,1,2,3,4]
有没有办法在不使用范围函数或循环的情况下实现这一目标?
谁能解释两种方法之间有什么区别?
方法1
public void run(){
run();
}
Run Code Online (Sandbox Code Playgroud)
方法2
public void run(){
while(true){
}
}
Run Code Online (Sandbox Code Playgroud) 我必须在所有数字中找到多个最小素数因子,直到10 ^ 7.我正在使用Eratosthenes的Sieve来找到所有素数.并且在一个单独的数组中,我存储了复合数的最小素因子.这是我的代码
for(ull i=2;i<=m;i++)
{
if (check[i])
{
uncheck[i]=true;
for (ull k=i*i; k<=n; k+=i)
{
if(check[k]==true)
phi[k]=g;
check[k]=false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我正在运行一个循环,直到n并在其中使用循环来计算它.这是代码
for(ull i=4;i<=n;i++)
{
if(check[i]==false)
{
ull count=0;
ull l=i;
ull r=phi[i];
while(l%r==0)
{
l=l/r;
count++;
}
cout<<count<<'\n';
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法来计算这个?