일부 함수의 귀속과 비귀속 실현의 비교

1397 단어
1. 피보나치 수열 실현~
반복 구현:
4
int fib(int n)
{
	if (n == 1 || n == 2)
		return 1;
	else
		return fib(n - 1) + fib(n-2);
}
비귀속(교체법) 실현:
4
int fib(int n)
{
	int num1 = 1;
	int num2 = 1;
	int num3 = 1;
	while (n > 2)
	{
		/*num3 = num1 + num2;
		num1 = num2;
		num2 = num3;*/// , , num3
		num1 = num1 + num2;
		num2 = num1 - num2;
		n--;
	}
	return num1;
}
상기 두 가지 실현 방법에서 알 수 있듯이 귀속 코드는 비귀속보다 훨씬 간단하다. 그러나 귀속 뒤의 이야기를 알고 있느냐~ 만약에 우리가
40번째 피보나 계수를 계산하려면 컴퓨터는 여러 번 계산해야 한다. 모든 귀속 호출은 다른 두 개의 귀속 호출을 촉발하고, 이 두 개의 귀속 호출은 또
트리거 귀속 호출.우리가fib(10)를 계산할 때fib(3)가 21번 호출되었는데, 이 숫자는 종이에서 유도할 수 있다.지출이 너무 많다.
그래서 시간과 공간의 복잡도를 보면 비귀속이 좋다~
2. 문자열 역순~
비귀속 실현:
4
void reverse(char *left, char *right)
{
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
귀속 실현:
4
void reverse_string(char* str)
{
	int len = Strlen(str);
	if (len > 1)
	{
		char tmp = str[0];
		str[0] = str[len - 1];
		str[len - 1] = '\0';
		reverse_string(++str);
		str[len - 1] = tmp;
	}
}
분석: 비귀속 실현 방법은 귀속보다 훨씬 좋고 비귀속 코드는 간단하고 이해하기 쉽다. 귀속 코드의 실현 원리: 문자열의 길이가 1보다 크면 귀속된다.
, 첫 번째 문자를 임시로 개척된 공간에 놓고, 마지막 문자를 첫 번째 문자의 위치에 놓고, 원래 마지막 문자의 위치를 정리한다
끝 문자를 위해, 귀속이 끝날 때, 임시 구역의 변수를 이른바 문자열의 끝에 두십시오 ~

좋은 웹페이지 즐겨찾기