數字累加
素數累加
示例代碼:
#include <iostream> int sum(int); int judge(int); int sumOfPlain(int); int main(int argc, char** argv) { //printf("%d\n",sum(3)); //printf("%d\n",judge(5)); printf("%d\n",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的病毒都是先用一個遞歸讓手機重啟,然後安裝上。