C 언어와 귀속과 비귀속의 장단점 및 선택에 대한 간단한 분석.
귀속과 비귀속은 문제를 해결하는 수단으로서 각각의 장점과 폐단이 있기 때문에 우리는 각자의 특성을 익히고 파악하여 서로 다른 문제를 대하고 가장 좋은 알고리즘을 만들어야 한다.
예를 들어 피보나치 수열:
int fib(int num)//
{
if(num==1||num==2)
{
return fib(num-1)+fib(num-2)
}
}
int fib(int num)//
{
int num1=1;
int num2=1;
int num=1;
if(num>2)
{
for(int i=3;i<=num;i++)
{
num=num1+num2;
num1=num1;
num2=num;
}
return num;
}
우리는 다음과 같이 알 수 있다. 귀속의 장점: 코드는 상대적으로 비귀속에 비해 더욱 간결하고 사고방식이 뚜렷하다.귀환의 나쁜 점: 귀환은 시스템 창고가 필요하기 때문에 소모 공간이 비귀환보다 훨씬 크다.그리고 귀속 깊이가 너무 깊으면 시스템이 무너질 수도 있다.
비귀속의 장점: 효율이 높고 실행 시간은 순환의 횟수가 증가함에 따라 증가할 뿐 추가 비용이 없고 추가 공간을 차지하지 않는다.비귀속의 단점: 이해하기 쉽지 않고 복잡한 문제를 작성할 때 비교적 어렵다.
통속적으로 말하면 귀속은 문제를 층층이 세분화하고 여러 개의 작은 문제로 분해한 다음에 하나하나 해결하는 것이다.대다수 상황에서 프로그래머들은 전체 문제의 해결 방법을 생각해야 하기 때문에 프로그래머 자신의 사고에 큰 도전이 있다.
는 많은 상황에서 수학 공식의 지원만 있으면 귀속 알고리즘은 보통 문제를 해결하기 쉽다.
귀속과 순환 사이의 선택.일반적인 상황에서\순환 방법이 비교적 쉽게 찾을 수 있을 때\귀속 사용을 피해야 한다.이것은 문제를 점차적인 관계식에 따라 묘사할 수 있을 때\8194는 자주 만나는 것이다.\예컨대 곱하기 문제는 바로 이런 상황이다.반대로 순환 방법을 세우기 어려울 때 귀환은 좋은 방법이다.실제로 는 어떤 상황에서 귀속 방법은 항상 명백히 알 수 있지만 순환 방법은 상당히 찾기 어렵다.
귀속 알고리즘은 사실상 분할하여 치료하는 방법으로 복잡한 문제를 간단한 문제로 분해하여 해답을 구한다.일부 복잡한 문제에 대해 귀속 알고리즘은 자연스럽고 논리에 맞는 문제를 해결하는 방식이지만 귀속 알고리즘의 집행 효율은 보통 비교적 떨어진다.따라서 어떤 문제를 풀 때 귀속 알고리즘을 이용하여 문제를 분석하고 비귀속 알고리즘으로 문제를 구한다.또한 일부 프로그램 설계 언어는 귀속을 지원하지 않기 때문에 귀속 알고리즘을 비귀속 알고리즘으로 전환해야 한다.
한 마디로 하면 작은 것은 간단하게 순환을 하고 복잡도가 높은 문제, 시스템이 버틸 수 있는 상황에서 귀속을 한다.(개인 의견)
배달 비귀속의 전환 예를 들어 상기 코드 세그먼트, 피보나 계수의 배달이 비귀속으로 전환된다. 두 개의 국부 변수num1,num2만 추가하면 귀속에 저장해야 하는 데이터를 프로그램 자체에 저장하면 귀속이 비귀속으로 전환할 수 있다.
이런 전환 사고는 대부분 복잡한 문제의 해결에 응용될 수 있다.만약에 문제가 너무 복잡하면 비귀환으로 일시적으로 해결되지 않는 알고리즘을 사용하고 귀환으로 해결하려면 너무 많은 창고를 소모해야 하거나 문제를 비귀환으로 해결해야 한다고 규정하면 먼저 문제를 귀환의 대사화소한 사유로 귀환 알고리즘을 풀고 그 다음에 귀환 알고리즘을 비귀환 알고리즘으로 바꾸면 된다. "운전 경력"이 아직 짧고, 경험이 아직 얕으니, 지적해 주시기 바랍니다.결함은 아마도 학식이 부족한 것일 것이고, 배운 것이 다섯 수레에 달하면, 반드시 보충해야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.