Recursive function

5-1 已知A[n]爲整數數組,試寫出實現下列運算的遞歸算法:

(1) 求數組A中的最大整數。

(2) n個整數的和。

(3) n個整數的平均值。

【解答】

#include <iostream.h>class RecurveArray { //數組類聲明private: int *Elements; //數組指針 int ArraySize; //數組尺寸

int CurrentSize; //當前已有數組元素個數public :

RecurveArray ( int MaxSize =10 ) :

ArraySize ( MaxSize ), Elements ( new int[MaxSize] ){ }~RecurveArray ( ) { delete [ ] Elements; }void InputArray(); //輸入數組的內容int MaxKey ( int n ); //求最大值int Sum ( int n ); //求數組元素之和

float Average ( int n ); //求數組元素的平均值

};

 

void RecurveArray :: InputArray ( ){ //輸入數組的內容

cout << "Input the number of Array: /n";

for ( int i = 0; i < ArraySize; i++ ) cin >> Elements[i];

}

 

int RecurveArray :: MaxKey ( int n ) { //遞歸求最大值

if ( n == 1 ) return Elements[0];

int temp = MaxKey ( n - 1 );

if ( Elements[n-1] > temp ) return Elements[n-1];

else return temp;

}

 

int RecurveArray :: Sum ( int n ) { //遞歸求數組之和

if ( n == 1) return Elements[0];

else return Elements[n-1] + Sum (n-1);

}

 

float RecurveArray :: Average ( int n ) { //遞歸求數組的平均值

if ( n == 1) return (float) Elements[0];

else return ( (float) Elements[n-1] + ( n - 1) * Average ( n - 1 ) ) / n;

}

 

int main ( int argc, char* argv [ ] ) { int size = -1;

cout << "No. of the Elements : ";

while ( size < 1 ) cin >> size;

RecurveArray ra ( size );

ra.InputArray();

cout<< "/nThe max is: " << ra.MaxKey ( ra.MaxSize ) << endl;

cout<< "/nThe sum is: " << ra.Sum ( ra.MaxSize ) << endl;

cout<< "/nthe avr is: " << ra.Average ( ra.MaxSize ) << endl;

return 0;

}

 

5-5 已知f爲單鏈表的表頭指針, 鏈表中存儲的都是整型數據,試寫出實現下列運算的遞歸算法:

(1) 求鏈表中的最大整數。

(2) 求鏈表的結點個數。

(3) 求所有整數的平均值。

【解答】

#include <iostream.h> //定義在頭文件"RecurveList.h"

class List;

class ListNode { //鏈表結點類

friend class List;

private:

int data; //結點數據

ListNode *link; //結點指針

ListNode ( const int item ) : data(item), link(NULL) { } //構造函數

};

class List { //鏈表類

private:

ListNode *first, current;

int Max ( ListNode *f );

int Num ( ListNode *f );

float Avg ( ListNode *f, int& n );

public:

List ( ) : first(NULL), current (NULL) { } //構造函數

~List ( ){ } //析構函數

ListNode* NewNode ( const int item ); //創建鏈表結點, 其值爲item

void NewList ( const int retvalue ); //建立鏈表, 以輸入retvalue結束

void PrintList ( ); //輸出鏈表所有結點數據

int GetMax ( ) { return Max ( first ); } //求鏈表所有數據的最大值

int GetNum ( ) { return Num ( first ); } //求鏈表中數據個數

float GetAvg ( ) { return Avg ( first ); } //求鏈表所有數據的平均值

};

 

ListNode* List :: NewNode ( const int item ) { //創建新鏈表結點

ListNode *newnode = new ListNode (item);

return newnode;

}

 

void List :: NewList ( const int retvalue ) { //建立鏈表, 以輸入retvalue結束

first = NULL; int value; ListNode *q;

cout << "Input your data:/n"; //提示

cin >> value; //輸入

while ( value != retvalue ) { //輸入有效

q

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章