递归程序是指在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的程序。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。满足使用递归的条件:
子问题为同类事物,且更简单
必须有个出口
优点:
代码简洁
符合思维习惯,容易理解
缺点:
效率较低
递归层次太深,耗内存且容易栈溢出一定要使用的话,最好使用缓存避免相同的计算,限制递归调用的次数
当然是用循环实现好。
用递归的话,每次递归,都需要调用该函数。然而,调用函数,系统需要把主调函数的状态保存在系统栈里面。回到主调函数又要把原来保存的这些状态重新读取,显然增大了很多的 *** 作。
n的阶乘,就是从1开始乘到n,即123(n-1)n。
即n!=123(n-1)n。
而(n-1)!=123(n-1)。
所以可以得出,n!=(n-1)! n。
由这个概念,可以得出递归求阶乘函数fact的算法:
1 如果传入参数为0或1,返回1;
2 对于任意的n,返回nfact(n-1)。
#include<iostream>
using namespace std;
int counter=0,flag;
void Ss(int x)
{
if(x==0)
{
if(counter%2==0)
flag=1;
return ;
}
else if(x<0)
return;
else
{
counter++;
Ss(x-1);
Ss(x-3);
Ss(x-7);
Ss(x-8);
}
}
int main()
{
int cas,a;
cin>>cas;
while(cas--)
{
counter=0;
flag=0;
cin>>a;
Ss(a);
if(flag==1)
cout<<"1"<<endl;
else
cout<<"0"<<endl;
}
} //虽然用了递归,但是算法有问题,结果不对,但是贴出来希望能帮到你吧。
能力有限,仅知几点
两者都是重复某一 *** 作直到满足条件为止。
不同之处在于,递归是函数调用自身,而迭代是使用循环。
某些情况下递归更加简单,可读性更高,而用循环则十分复杂。如二分法,快速排序等。
递归很容易导致栈溢出,导致程序崩溃,而循环不会。
综上所述,能用循环用循环,递归是万不得已的手段。
以上就是关于什么是递归程序递归程序的优缺点是什么全部的内容,包括:什么是递归程序递归程序的优缺点是什么、请高手从程序性能分析下c程序求和用循环实现还是递归实现好、关于C的C中是用递归求阶乘效率高还是循环等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)