C語言之遞迴經典問題

2021-10-04 06:21:11 字數 2286 閱讀 4301

目錄

一、十進位制轉換

二、前中序遍歷確定後序遍歷

三、漢諾塔

四、八皇后問題

五、細胞**

分治法將原問題劃分為若干個規模較小而結構與原問題相同或相似的子問題,然後分別解決這些子問題,最後合併問題的解即為原問題的解。

遞迴很適合實現分治思想,遞迴的邏輯中有兩個重要概念:遞迴邊界和遞迴式。

//十進位制數遞迴轉換為小於10的進製數

#include#define radix 2

void convert(int n, int x)

}int main()

return 0;

}

#include#include#includetypedef struct binode

binode, *btree;

//前中序確定後序

btree preintree(char preorder, int pl, int pr, char inorder, int il, int ir)

和為例int i = 0;

int len_p = pr-pl+1, len_i = ir-il+1;

if(len_p <= 0 || len_i <= 0)

return null;

while(inorder[il+i] != preorder[pl]) //找到前序遍歷首節點在中序遍歷的位置

i++;

binode *p = (binode*)malloc(sizeof(binode));

p->data = preorder[pl];

//i=3,和

p->lchild = preintree(preorder, pl+1, pl+i, inorder, il, il+i-1);

//和p->rchild = preintree(preorder, pl+i+1, pr, inorder, il+i+1, ir);

printf("%c", preorder[pl]);

return p;

}int main()

return 0;

}

#includeint main()

void hanoi(int n, char one, char two, char three) //將n個盤從one座借助two座,移到three座

}void move(char x, char y)

題目描述:在 8×8 格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。

假設每行放皇后,則只需要考慮列情況,即陣列下標表示行,陣列元素表示列。

#include#include#define n 8

int array[10];

int sum=0;

int judge(int k)

int queen(int k)

} return sum;

}int main()

題目描述:有乙個細胞 每乙個小時**一次,一次**乙個子細胞,第三個小時後會死亡。那麼n個小時候有多少細胞?

圖中的 a 代表細胞的初始態, b代表幼年態(細胞**一次), c 代表成熟態(細胞**兩次),c 再經歷一小時後細胞死亡 以 f(n) 代表第 n 小時的細胞分解數 fa(n) 代表第 n 小時處於初始態的細胞數, fb(n) 代表第 n 小時處於幼年態的細胞數 fc(n) 代表第 n 小時處於成熟態的細胞數。遞推關係如下:

C語言 之遞迴函式

今天來總結一下關於遞迴函式的使用方面的問題。遞迴函式就是在函式使用的時候自己呼叫自己,層層呼叫,來實現你想要的功能。有兩個最常用的例子,我們來寫一下。1 計算階乘 include int factorial int n 函式宣告 階乘 int main void int a 5 printf d的階...

C語言經典例題之遞迴

遞迴方式實現列印乙個整數的每一位 define crt secure no warnings 1 include void print int n printf d n 10 intmain 遞迴實現n的階乘 define crt secure no warnings 1 include intfa...

C語言之typedef的問題

1.基本解釋 typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。這裡的資料型別包括內部資料型別 int,char等 和自定義的資料型別 struct等 在程式設計中使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一些比較複雜的型別宣告。至於ty...