国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++遞歸算法實例代碼

2020-05-23 13:39:09
字體:
來源:轉載
供稿:網友

遞歸算法,總結起來具有以下幾個特點:

    特點1  它有一個基本部分,即直接滿足條件,輸出
    特點2  它有一個遞歸部分,即 通過改變基數(即n),來逐步使得n滿足基本部分的條件,從而輸出
    特點3  在實現的過程中,它采用了分治法的思想:
       即將整體分割成部分,并總是從最小的部分(基本部分)開始入手(輸出),其背后的原理在于 當整體遞歸到部分時,會保留整體的信息,部分滿足條件輸出的結果會被回溯給整體使用,從而使得整體輸出結果。
    特點4  每一步操作,整體都會將部分當作其必要的一個步驟,從而實現整體步驟的完成

1.Question:

本題是用枚舉的思路來判斷一個規定的邏輯表達式是不是永真式

首先題目意思是最多不會有超過5個邏輯變量,有五種運算

 

Definitions of K, A, N, C, and E
     w  x   Kwx   Awx    Nw   Cwx   Ewx
  1  1   1   1    0   1   1
  1  0   0   1    0   0   0
  0  1   0   1    1   1   0
  0  0   0   0    1   1   1

 

其中

K &
A |
N !
C ->
E 同或

其中的C我們可以利用 !A | B 實現

E利用==實現

本題的主要難點并不在于實現我們的語句計算的方式

難點1:
遞歸求解表達式,在這里真的是有深刻的理解了遞歸的強大之處,我們本題的做法真的離不開遞歸,我們的做法是一個一個字符的開始枚舉的遞歸,每個字符分出10種情況,五種變量,五種運算符,這里我們添加一個指示器變量表示我們當前的遞歸的位置和深度,我們不用設置我們的遞歸的終止條件,因為我們的表達式保證了一定是正確的,我們的計算結果一定是會有返回值的,我們的計算結果是一層一層的返回的

難點2:

位運算,我們本題如果不利用位運算的話,至少需要寫5層循環來模擬我們的變量的所有的情況,這樣太低效了,我們將我們的所有的變量封裝到一個一個字節的存儲器中,每次利用位運算提取相關的位置的數字就好了(雖然我們的表達式并不會運算所有的情況,但是至少不會錯)

Code:

#include"iostream"#include"cstdio"#include"cstdlib"#include"cstring"using namespace std;int pos=0;string data;bool cal(int i){	int t=pos++;	switch(data[t])	{		case 'p':			return (i >> 4)&1;		case 'q':			return (i >> 3)&1;		case 'r':		  return (i >> 2)&1;		case 's':		  return (i >> 1)&1;		case 't':		  return i&1;		case 'K':		  return cal(i) & cal(i);		case 'A':		  return cal(i) | cal(i);		case 'N':			return !cal(i);		case 'C':			return !cal(i) | cal(i);		case 'E':			return cal(i) == cal(i);	}}bool isTautology(){	for(int i=0;i<=31;i++)	{		pos=0;		if(cal(i)) continue;		else return false;	}	return true;}int main(){	while(cin>>data&&data[0]!='0')	{		if(isTautology()) cout<<"tautology"<<endl;		else cout<<"not"<<endl;	}	return 0;}

總結

以上就是本文關于C++遞歸算法實例代碼的全部內容,希望對大家有所幫助。有什么問題,可以隨時留言,歡迎大家交流討論。感謝朋友們對本站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东阿县| 高安市| 兴宁市| 万宁市| 台东市| 特克斯县| 西吉县| 沂源县| 元江| 铅山县| 彭泽县| 江西省| 惠州市| 罗平县| 周宁县| 闵行区| 合肥市| 绍兴市| 栾城县| 合肥市| 天镇县| 准格尔旗| 眉山市| 东辽县| 长兴县| 衡阳市| 亳州市| 金平| 宁河县| 青州市| 宾川县| 神池县| 庆云县| 松潘县| 赤水市| 陆丰市| 阿城市| 棋牌| 卫辉市| 元朗区| 扶余县|