演算法設計與應用練習 遞迴

2021-09-28 16:00:45 字數 2595 閱讀 2737

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 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,成為遞迴出口,否則將無限進行下去 遞迴的缺點 遞迴演...