数字累加
素数累加
示例代码:
#include <iostream> int sum(int); int judge(int); int sumOfPlain(int); int main(int argc, char** argv) { //printf("%d ",sum(3)); //printf("%d ",judge(5)); printf("%d ",sumOfPlain(10)); //2 3 5 7 return 0; } int sum(int a){ if(a<=0){ return 0; } else if(a==1){ return 1; } else return a+sum(a-1); } /** 判断是否是 素数,是的话,就返回它本身否则就返回0 */ int judge(int a){ //有三种方式第一种是:一直到a-1 //验证过是到 a/2 但是 由于不存在 一半儿的这种情况,所以我们不妨多加一个数儿 //再有就是 一直除到开方,的这个范围。如果还是除不开,那就除不开了。 for(int i=2;i<a/2+1;i++){ if(a%i==0){ return 0; } } return a; } int sumOfPlain(int a){ int afterJ = judge(a); if(a<=1){ return 0; } else if(a==2){ return 2; } else{ return afterJ+sumOfPlain(a-1); } }
关于递归:
递归的优点:给某些问题提供了最简单算法:汉诺塔,二分查找,快速排序,斐波那契数列。缺点:(如果没有合适的出口)将会很快耗尽计算机的资源,递归的程序难以理解和维护对于windows来说 屏幕啊,响应啊各种东西都不动了,但是对于linux来说,系统将会重启。Linux的内核是这样写的,当它的内存里面没有可以再利用的空间的时候就会自动重启。忽然想到了手机。。。自动重启,就是因为内存没有了,里面又是包装的linux的内核,所以。。。很多android的病毒都是先用一个递归让手机重启,然后安装上。