일부 함수의 귀속과 비귀속 실현의 비교
반복 구현:
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보다 크면 귀속된다., 첫 번째 문자를 임시로 개척된 공간에 놓고, 마지막 문자를 첫 번째 문자의 위치에 놓고, 원래 마지막 문자의 위치를 정리한다
끝 문자를 위해, 귀속이 끝날 때, 임시 구역의 변수를 이른바 문자열의 끝에 두십시오 ~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.