程式的遞迴演算法與非遞迴的區別,程式的遞迴演算法與非遞迴有什麼區別?

時間 2021-08-30 10:27:56

1樓:南北

遞迴演算法是一種直接或者間接地呼叫自身的演算法。

在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而且易於理解。

遞迴就是在過程或函式裡呼叫自身。

在使用遞迴策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口。

遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的執行效率較低。所以一般不提倡用遞迴演算法設計程式。

在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位。

2樓:匿名使用者

以下是比較全面的解釋,可以看看。 遞迴演算法是一種直接或者間接地呼叫自身的演算法。在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而且易於理解。

  遞迴演算法解決問題的特點:   (1) 遞迴就是在過程或函式裡呼叫自身。   (2) 在使用遞迴策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口。

  (3) 遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的執行效率較低。所以一般不提倡用遞迴演算法設計程式。   (4) 在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。

遞迴次數過多容易造成棧溢位等。所以一般不提倡用遞迴演算法設計程式。

c語言的兩個問題: 所有的遞迴程式均可以用非遞迴演算法實現?遞迴函式中的形式引數是自動變數嗎? c語言中

3樓:匿名使用者

c語言所有遞迴都bai可以用非遞迴演算法實du現,最典型的就是

zhi迭代法dao,有時比遞迴更容專易理解。至

於遞迴中屬的形式引數是自動變數,沒明白樓主的意思,形參就是形參啊,形參變數也是變數,其記憶體分配在棧區,隨著函式的結束,其記憶體也會被釋放,形參的生命週期與函式生命週期相同哈(同生共死)

4樓:匿名使用者

||#include

unsigned int fibonacci(int n);

int main( void )

return 0;

}unsigned int fibonacci(int n)這種演算法效屬率比較低

**不清楚可以hi我

5樓:賊寇在何方

1.是的,藉助堆疊都可以實現

2.是的

程式的遞迴演算法與非遞迴有什麼區別?

6樓:南北

遞迴演算法是一種直接或者間接地呼叫自身的演算法。

在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而且易於理解。

遞迴就是在過程或函式裡呼叫自身。

在使用遞迴策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口。

遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的執行效率較低。所以一般不提倡用遞迴演算法設計程式。

在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位。

c語言程式題:寫出遞迴與非遞迴兩種折半查詢程式,並分析其時間空間複雜度。

7樓:匿名使用者

折半查詢需要先對資料進行排序。

#include

using namespace std;

int bsearch(int data, const int x, int beg, int last)

while(beg <= last)

else if (data[mid] < x)

else if (data[mid] > x)

}return -1;

}int  rbsearch(int data, const int x, int beg, int last)

else if (x < data[mid])

else if (x > data[mid])

}int main(void)

;//int num = 3;

int num=30;

cout << "the array is : " << endl;

int n = sizeof(data)/sizeof(int);

for (int i = 0; i < n; i++)

cout << endl;

int index = -1;

//index = bsearch(data,num,0,n);

index = rbsearch(data, num, 0,n);

cout << "index of " << num << " is " << index << endl;

system("pause");

return 0;

}以上是氣泡排序演算法的實現。

折半查詢演算法描述如下:

在有序表中,把待查詢資料值與查詢範圍的中間元素值進行比較,會有三種情況出現:

1)     待查詢資料值與中間元素值正好相等,則放回中間元素值的索引。

2)     待查詢資料值比中間元素值小,則以整個查詢範圍的前半部分作為新的查詢範圍,執行1),直到找到相等的值。

3)     待查詢資料值比中間元素值大,則以整個查詢範圍的後半部分作為新的查詢範圍,執行1),直到找到相等的值

4)     如果最後找不到相等的值,則返回錯誤提示資訊。

實現如下:

#include

using namespace std;

int bsearch(int data, const int x, int beg, int last)

while(beg <= last)

else if (data[mid] < x)

else if (data[mid] > x)

}return -1;

}int  rbsearch(int data, const int x, int beg, int last)

else if (x < data[mid])

else if (x > data[mid])

return -1;

}int main(void)

;int num = 3;

cout << "the array is : " << endl;

int n = sizeof(data)/sizeof(int);

for (int i = 0; i < n; i++)

cout << endl;

int index = -1;

//inedx=bsearch(data,num,0,n);

index = rbsearch(data, num, 0,n);

cout << "index of " << num << " is " << index << endl;

system("pause");

return 0;

}複雜度分析:

折半查詢就像搜素二叉樹:中間值為二叉樹的根,前半部分為左子樹,後半部分為右子樹。折半查詢法的查詢次數正好為該值所在的層數。

等概率情況下,約為log2(n+1)-1,其演算法複雜度為o(log(n))。

求階乘n 的遞迴演算法

伊寄壘 include int fun int n int main 5 120 遞迴演算法的原理 遞迴是電腦科學的一個重要概念,遞迴的方法是程式設計中有效的方法,採用遞迴編寫 遞迴能使程式變得簡潔和清晰。 海菜家的北北 思路 遞迴求階乘函式,如果輸入的引數等於1則返回1,否則返回n乘以該函式下次遞...

編寫非遞迴遍歷演算法,統計二叉樹的深度。各位請幫幫忙吧,急

include include define maxsize 100 typedef char datatype typedef struct node 二叉樹結點型別 bitree bitree q maxsize 用於建立二叉樹 bitree creatree 函式宣告 int depth bi...

程式的靈魂 演算法!非高手勿進

冒險島樂樂 這個問題以前見過。如果只是驗證不是證明,問題不難。小可給出自己的方法 編譯環境 win tc dev c 編譯結果 通過 include include include int main system pause return 0 ssssssssssssssssssssssssss 孤...