考研數據結構之棧(2.5)——練習題之求解二次方根A的迭代函數,寫出相應的遞歸算法和非遞歸算法(C表示)

題目

分析

實際上就是遞歸的使用。

代碼

核心代碼:

/* 遞歸算法 */
float sqrt(float A,float p,float e) {
	if(abs(p*p-A)<e) {
		return p;
	} else if(abs(p*p-A)>=e) {
		sqrt(A,(p+A/p)/2,e);
	}
}

/* 非遞歸算法 */
float sqrt_2(float A,float p,float e) {
	while(abs(p*p-A)>=e) {
		p=(p+A/p)/2;
	}
	return p;
}

完整代碼:

#include<stdio.h>

#define maxSize 20

/* 求絕對值 */
float abs(int x) {
	if(x<0) {
		return -x;
	} else {
		return x;
	}
}

/* 遞歸算法 */
float sqrt(float A,float p,float e) {
	if(abs(p*p-A)<e) {
		return p;
	} else if(abs(p*p-A)>=e) {
		sqrt(A,(p+A/p)/2,e);
	}
}

/* 非遞歸算法 */
float sqrt_2(float A,float p,float e) {
	while(abs(p*p-A)>=e) {
		p=(p+A/p)/2;
	}
	return p;
}

int main() {
	float A=10;
	float p=3;
	float e=2.3;
	float r1=sqrt(A,p,e);
	printf("%2.f\n",r1);
	float r2=sqrt_2(A,p,e);
	printf("%2.f\n",r2);

	return 0;
}

運行結果:

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