1.十進位制轉二進位制
2.斐波那契數列
3.翻牌問題
4.打靶問題
5.八皇后問題
#include
"stdio.h"
#include
#include
#include
#include
#include
"stdlib.h"
//1.輸入乙個自然數(<90000), 分別用遞迴法和非遞迴法求其二進位制表示.
//演算法設計思想:num/2就是num的二進位制序列當中除去最低位之外的部分,num%d表示輸出num的二進位制序列當中的最低位
/*遞迴演算法*/
void
fun(
int num)
}int
main()
fun(num)
;return0;
}/*非遞迴演算法*/
intmain()
while
(num!=0)
for(j=i-
1;j>=
0;j--
)printf
("%d"
,b[j]);
}//2.分別用遞迴法和非遞迴法求fibonacci數列的前1000位,並比較計算時間的差異.
//函式fibod(num)的特點是,如果n不是遞迴出口,那麼乙個規模是n的fbio函式就可以轉化為兩個規模更小的fbio函式的和,乙個是fbio(n-1),乙個是fbio(n-2)。如果這兩個函式仍然沒有到達遞迴終點,仍需要繼續遞迴分解。
/*遞迴演算法*/
intfibod
(int n)
/*非遞迴演算法*/
intfibof
(int n)
return b;
}int
main()
/*3.用遞迴演算法完成如下問題:有52張牌,使它們全部正面朝上,第一輪是從第2張開始,凡是2的倍數字置上的牌翻成正面朝下;
/*第二輪從第3張牌開始,凡是3的倍數字置上的牌,正面朝上的翻成正面朝下,正面朝下的翻成正面朝上;第三輪從第4張牌開始,凡是4的
倍數字置上的牌按上面相同規則翻轉,以此類推,直到第一張要翻的牌超過52為止。統計最後有幾張牌正面朝上,以及它們的位置號.*/
using namespace std;
bool card[
100]
;void
turn
(int x)
turn
(x+1);
}int
main()
return0;
}/*4.乙個射擊運動員打靶,靶一共有10環,連開6槍打中45環的可能性有多少種? (每一槍最少是0環,最多是10環)*/
using namespace std;
int sum;
int store[6]
;void
compute
(int score,
int num)
for(
int i=
0;i<=10;
++i)
}int
main()
//5.在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,輸出所有擺法。
//程式設計思想:有8個元素的陣列記錄已經擺放的棋子擺在什麼位置,當要放置乙個新的棋子時,只需要判斷它與已經放置的棋子之間是否衝突就行了。
/*從棋盤的第一行開始,從第乙個位置開始,依次判斷當前位置是否能夠放置皇后,判斷的依據為:同該行之前的所有行中皇后的所在位置進行比較,如果在同一列,或者在同一條斜線上(斜線有兩條,為正方形的兩個對角線),都不符合要求,繼續檢驗後序的位置。
如果該行所有位置都不符合要求,則回溯到前一行,改變皇后的位置,繼續試探。
如果試探到最後一行,所有皇后擺放完畢,則直接列印出 8*8 的棋盤。最後一定要記得將棋盤恢復原樣,避免影響下一次擺放。*/
int queenes[8]
=,counts=0;
intcheck
(int line,
int list)
//如果當前位置的斜上方有皇后,在一條斜線上,也不行if(
(index+data)
==(line+list)
)//如果當前位置的斜下方有皇后,在一條斜線上,也不行if(
(index-data)
==(line-list))}
//如果以上情況都不是,當前位置就可以放皇后
return1;
}//輸出語句
void
print()
printf
("\n");
}printf
("***************=\n");
}void
eight_queen
(int line)
//繼續判斷下一樣皇后的擺法,遞迴
eight_queen
(line+1)
;//不管成功失敗,該位置都要重新歸0,以便重複使用。
queenes[line]=0
;}}}
intmain()
演算法設計與分析之遞迴演算法練習(下)
遞迴演算法九 整數劃分問題 遞迴演算法十 排隊購票 遞迴演算法十一 楊輝三角 遞迴演算法十二 計算兩個數的最大公約數 遞迴演算法十三 計算乙個正整數中所有的數字之和 遞迴演算法十四 求 1 1 2 1 3 1 n 的和 本部落格其他文章推薦 當n 1時,perm r r 其中r是集合r中唯一的元素 ...
演算法分析與設計 遞迴與尾遞迴
什麼是遞迴?遞迴最恰當的比喻,就是查詞典。我們使用的詞典,本身就是遞迴,為了解釋乙個詞,需要使用更多的詞。當你查乙個詞,發現這個詞的解釋中某個詞仍然不懂,於是你開始查這第二個詞,可惜,第二個詞裡仍然有不懂的詞,於是查第三個詞,這樣查下去,直到有乙個詞的解釋是你完全能看懂的,那麼遞迴走到了盡頭,然後你...
演算法設計與分析 遞迴
遞迴是一種技術手段,並不嚴格算是一種演算法,是指程式直接間接呼叫自身的程式設計技巧。遞迴需要有邊界條件,遞迴前進段和遞迴返回段。1 當邊界條件不滿足時,遞迴前進 2 當邊界條件滿足時,遞迴返回。ps 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,成為遞迴出口,否則將無限進行下去 遞迴的缺點 遞迴演...