演算法設計 遞迴和分治

2021-09-27 07:18:31 字數 1458 閱讀 4140

任務1:計算斐波那契數列,首元素從序號0開始

任務描述:分別利用遞迴和迭代法輸出斐波那契數列的第n項的值,檢查輸出結果的正確性。將**複製貼上到方框中,將執行結果截圖。

演算法輸入:7

演算法輸出:斐波那契數列中第n項=21

//遞迴法

#include

int fun(int n)

int main(void) else

printf("輸入錯誤,請重新輸入!");

return 0;

}//迭代法

#include

main()

printf("第%d項的為:%d\n",n,c);

}任務2:漢諾塔問題

任務描述:修改**輸出漢諾塔問題的全部移動步驟,初始狀態所有圓盤在b塔,要求移動到a塔。將**複製貼上到方框中,將執行結果截圖。

void hanoi(int n,char a,char b,char c)

}

#include

#include

void main()

void hanoi(int n,char b,char c,char a)

else if(n==1)

printf("%c->%c\n",b,a);//直接從b->c

}任務3:有序序列的二分搜尋(遞迴)演算法的設計與實現

任務描述:閱讀下面的**,完成括號中的關鍵**,完善程式,利用遞迴技術實現二分搜尋,檢查結果的正確性,將**貼上到方框中。

int binsearch(int a[ ],int low, int high, int key)

else

return -1;//未找到返回-1

}

#include

#include

void main()

printf("input key number:");

scanf("%d",&key);

//進行二分查詢

while(low<=high)

else if(key

else

}if(low>high)

}

遞迴和分治

分治 divide and conquer 是基於多分枝遞迴的一種演算法。簡單的說就是把乙個大問題分解為多個型別相同的子問題,最後把這些子問題的解合併起來就是問題的解。我們看一下典型的遞迴和分治演算法。問題1 插入排序的遞迴演算法 思路 1.首先找到突破點 如果共有n個數,如果前面n 1個都已排序,...

遞迴和分治

在高階語言中,函式自己呼叫和呼叫其他函式並沒有本質的不同。我們把乙個直接呼叫自己或通過一系列的呼叫語句間接地呼叫自己的函式,稱作遞迴函式。不過,寫遞迴程式最怕的就是陷入永不結束的無窮遞迴中。切記,每個遞迴定義必須至少有乙個條件,當滿足這個條件時遞迴不再進行,即函式不再呼叫自身而是返回值。比如之前我們...

分治演算法 1 金塊問題 遞迴和分治策略

例14 2 金塊問題 有乙個老闆有一袋金塊。每個月將有兩名雇員會因其優異的表現分別被獎勵乙個金塊。按規矩,排名第一的雇員將得到袋中最重的金塊,排名第二的雇員將得到袋中最輕的金塊。根據這種方式,除非有新的金塊加入袋中,否則第一名雇員所得到的金塊總是比第二名雇員所得到的金塊重。如果有新的金塊週期性的加入...