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 孤...