기금넷 공식사이트 - 복권 조회 - 수학의' 반복법' 은 무엇입니까? 무슨 소용이 있습니까?

수학의' 반복법' 은 무엇입니까? 무슨 소용이 있습니까?

반복법' 은' 뒤집기법' 이라고도 하며 변수의 이전 값에 의해 새 값이 재귀적으로 나오는 과정이다.

반복 알고리즘은 컴퓨터로 문제를 해결하는 기본 방법입니다. 컴퓨터 연산이 빠르고 반복 연산에 적합한 특징을 이용하여 컴퓨터가 일련의 명령어 (또는 일부 단계) 를 반복하도록 하고, 이 명령어 (또는 단계) 를 실행할 때마다 원래 값에서 변수의 새 값을 도출합니다.

반복 알고리즘을 사용하여 문제를 해결하려면 다음 세 가지 작업을 수행해야 합니다.

먼저 반복 변수를 결정합니다. 반복 알고리즘에서 해결할 수 있는 문제 중 하나 이상의 변수가 이전 값에서 직접 또는 간접적으로 새 값을 파생합니다. 이 변수는 반복 변수입니다.

둘째, 반복 관계를 설정합니다. 반복 관계란 한 변수의 이전 값에서 다음 값을 파생시키는 공식 (또는 관계) 입니다. 반복 관계의 수립은 반복 문제를 해결하는 열쇠이며, 일반적으로 반복 또는 역파생을 통해 수행할 수 있습니다.

셋째, 반복 과정을 제어합니다. 반복 프로세스는 언제 끝납니까? 이것은 반복 프로그램을 작성할 때 고려해야 할 문제입니다. 반복 과정은 끝없이 반복해서는 안 된다. 반복 프로세스의 제어는 일반적으로 두 가지 경우로 나눌 수 있습니다. 하나는 원하는 반복 횟수가 계산될 수 있는 값입니다. 다른 하나는 필요한 반복 횟수를 결정할 수 없다는 것입니다. 이전 경우 반복 프로세스를 제어하기 위해 고정된 수의 루프를 구성할 수 있습니다. 후자의 경우 반복 프로세스를 종료하는 데 사용되는 조건을 더 분석해야 합니다.

새로운 품종의 토끼가 한 농장에 도입되었다. 이런 토끼는 생후 두 달부터 매달 새 토끼 한 마리를 낳고, 새 토끼도 같은 방식으로 번식한다. 모든 토끼가 죽지 않았다면 12 월에 이 농장에 몇 마리의 토끼가 있습니까?

분석: 이것은 전형적인 재귀 문제입니다. 두 번째 1 달의 토끼 수가 u 1, 두 번째 달의 토끼 수는 u 2, 세 번째 달의 토끼 수는 u 3 ... 문제의 의미에 따르면, "이런 토끼는 태어난 다음 달부터 매월 새 토끼 한 마리를 낳는다" 고 가정해 보자.

U 1 = 1, U2 = u1+u1×1= 2,

이 법칙에 따라 다음과 같은 재귀 공식을 요약할 수 있다.

U n = u n-1 × 2 (n ≥ 2)

U n 과 U n- 1 에 해당하는 두 개의 반복 변수 y 와 x 가 정의되어 있으며 위의 반복 공식은 다음과 같은 반복 관계로 변환할 수 있습니다.

Y=x*2

X=y

컴퓨터가 이 반복 관계 1 1 회를 반복하게 하면 12 월의 토끼 수를 계산할 수 있다. 참조 절차는 다음과 같습니다.

Cls

X= 1

I=2 부터 12 까지의 경우

Y=x*2

X=y

다음으로 저는

인쇄 y

예 2: 아메바는 간단한 분열을 통해 번식하며, 분열할 때마다 3 분이 걸린다. 아메바 원충 몇 마리를 영양인삼액이 들어 있는 용기에 넣으면 45 분 후 용기에 아메바 원충이 가득 차게 된다. 이 용기는 아메바 원충 2,20 마리를 수용할 수 있는 것으로 알려져 있다. 처음에 용기에 아메바 몇 마리를 넣었습니까? 프로그래밍해 주세요.

해설: 문제의 의미에 따르면 아메바 원충은 3 분마다 분열되기 때문에 처음에는 아메바 원충을 용기에 넣고 45 분 후에 컨테이너를 가득 채우면 45/3= 15 회가 필요하다. 하지만' 용기에 최대 2 20 개의 아메바를 담을 수 있다' 는 것은 15 회로 나눈 아메바의 수가 2 20 이라는 뜻이다. 제목은 나누기 전에 아메바의 수를 계산해 달라고 요구했다. 우리는 15 나누기 2 20 에서 15 나누기 전 수 (즉 14 나누기 후 수) 를 추론한 다음/Kloc/ ...

첫 번째 1 보조 분할 전의 수를 x 0, 두 번째 1 보조 분할 후의 수를 x1,두 번째 분할 후의 수를 x 2, ../kloc 로 설정합니다

X 14 =x 15 /2, x 13 =x 14 /2, ...;

15 번째 분할 후의 수는 알려져 있으므로 반복 변수가 x 로 정의된 경우 위의 역산 공식을 다음과 같은 반복 공식으로 변환할 수 있습니다.

X = X/2(X 의 초기 값은 15 번째 분할 후의 숫자 2 20 임).

이 반복 공식을 15 회 반복하면 1 나누기 이전의 아메바 수를 추정할 수 있다. 필요한 반복 횟수가 결정된 값이므로 고정 루프 수를 사용하여 반복 프로세스를 제어할 수 있습니다. 참조 절차는 다음과 같습니다.

Cls

X = 2 20

I= 1 끝 15 의 경우

X=x/2

다음으로 저는

X 인쇄

예 3: 곡각 추측 확인. 일본 수학자 곡담정은 자연수를 연구할 때 이상한 현상을 발견했다. 임의의 자연수 N 에 대해 n 이 짝수라면 2 로 나눈다. N 이 홀수인 경우 3 을 곱한 다음 1 을 추가합니다. 유한한 차연산을 거쳐 항상 자연수 1 을 얻을 수 있다. 사람들은 타나키 좌사의 이 발견을' 타나키 추측' 이라고 부른다.

요구 사항: 키보드를 통해 자연수 N 을 입력하여 유한 연산을 거쳐 N 이 자연수 1 이 되는 전 과정을 인쇄하는 프로그램을 작성합니다.

해결: 반복 변수를 N 으로 정의합니다. 밸리 각도 추측의 내용에 따라 n 이 짝수인 경우 n = n/2 의 반복 관계를 얻을 수 있습니다. N 이 홀수인 경우 n=n*3+ 1 입니다. QBASIC 언어로 설명하면 다음과 같습니다.

N 이 짝수인 경우

N=n/2

기타

N=n*3+ 1

만약 ... 끝날거야

이것은 컴퓨터 반복이 필요한 반복 과정입니다. 이 반복 프로세스는 반복 변수 N 을 1 의 자연수로 만들기 위해 몇 번이나 반복해야 합니까? 이것은 우리가 계산할 수 없는 것입니다. 따라서 반복 프로세스를 종료하는 데 사용되는 조건을 추가로 결정해야 합니다. 문제의 목적 요구 사항을 자세히 분석해 보면, 주어진 자연수 N 에 대해 유한 연산을 거치면 자연수 1 을 얻을 수 있다는 것을 쉽게 알 수 있다. 검증 작업은 이미 완료되었다. 따라서 반복 프로세스를 종료하는 조건은 n= 1 으로 정의할 수 있습니다. 참조 절차는 다음과 같습니다.

Cls

"n =" 을 입력합니다. N

N= 1 까지

N 모드 2=0 이면

Rem n 이 짝수인 경우 반복 공식 n=n/2 가 호출됩니다.

N=n/2

\ "\" 인쇄; N;

기타

N=n*3+ 1

\ "\" 인쇄; N;

만약 ... 끝날거야

고리

반복법

반복법은 흔히 사용되는 방정식 또는 방정식의 대략적인 루트를 구하는 알고리즘 설계 방법입니다. 방정식을 f(x)=0 으로 설정하고, 어떤 수학적 방법으로 등가형 x=g(x) 를 도출한 후, 다음 단계를 따릅니다.

(1) 방정식의 대략적인 루트를 선택하여 변수 X0 에 할당합니다.

(2) 변수 x 1 에 x0 값을 저장한 다음 g(x 1) 를 계산하여 변수 x0 에 결과를 저장합니다.

(3) x0 과 x 1 의 절대값이 지정된 정밀도 요구사항보다 작을 때 단계 (2) 계산을 반복합니다.

방정식에 루트가 있고 위의 방법으로 계산된 대략적인 루트 시퀀스가 수렴되는 경우 위의 방법으로 계산된 x0 이 방정식의 루트인 것으로 간주됩니다. 위의 알고리즘은 c 프로그램으로 다음과 같이 표시됩니다.

방정식의 뿌리를 찾는 반복 알고리즘

{x0= 초기 근사 루트;

을 (를) 하다

X1= x0;

X0 = g (x1); /* 특정 방정식에 따라 새로운 근사 루트 계산 */

} while (fabs (x0-x1) > ε);

Printf ("방정식의 대략적인 루트는 %f\n", x0);

}

반복 알고리즘은 종종 방정식의 뿌리를 찾는 데도 사용됩니다.

X=(x0, x 1, ..., xn- 1)

방정식을 다음과 같이 만듭니다.

Xi=gi(X) (I=0, 1, ..., n- 1)

방정식의 루트를 찾는 반복 알고리즘은 다음과 같이 설명 할 수 있습니다.

방정식의 뿌리를 찾는 반복 알고리즘

{for(I = 0;; 나

X= 초기 근사 루트;

을 (를) 하다

For(I = 0;; 나

Y = x;;

For(I = 0;; 나

X = gi (x);

For(δ= 0.0, I = 0;; 나

If (fabs (y-x) > 델타) 델타 = fabs (y-x);

} while (델타 > ε);

For(I = 0;; 나

Printf ("변수 x[%d] 의 대략적인 루트는 %f", I, x);

Printf ("\ n");

}

반복법으로 루트를 구할 때, 다음 두 가지 가능한 상황에 주의해야 한다.

(1) 방정식이 풀리지 않으면 알고리즘에서 얻은 대략적인 루트 시퀀스가 수렴되지 않고 반복 프로세스가 무한 루프가 됩니다. 따라서 반복 알고리즘을 사용하기 전에 방정식에 대한 솔루션이 있는지 확인하고 프로그램에서 반복 횟수를 제한해야 합니다.

(2) 방정식에 대한 해답이 있지만 반복 공식 선택이 부적절하거나 초기 근사치 루트 선택이 불합리하면 반복이 실패할 수 있습니다.

재귀적

재귀는 알고리즘을 설계하고 설명하는 강력한 도구입니다. 복잡한 알고리즘에 대한 설명에 자주 사용되기 때문에 다른 알고리즘 설계 방법을 소개하기 전에 먼저 논의해야 합니다.

재귀적으로 설명할 수 있는 알고리즘은 일반적으로 다음과 같은 특징을 가지고 있습니다. N 크기의 문제를 해결하기 위해 가능한 한 작은 문제로 분해한 다음, 이러한 작은 문제의 해결로 큰 문제의 해결을 쉽게 구성할 수 있습니다. 이러한 작은 문제도 동일한 분해 합성 방법을 사용하여 더 작은 문제로 분해할 수 있으며, 이러한 작은 문제의 해결로 더 큰 문제의 해결을 구성할 수 있습니다. 특히, N= 1 을 스케일할 때 직접 해석할 수 있습니다.

문제는 피보나치 수열의 N 번째 함수인 fib(n) 를 쓰고 계산하는 것이다.

피보나치 수열은 0, 1, 1, 2,3, ... 입니다.

Fib (0) = 0;

Fib (1) =1;

Fib(n)=fib(n- 1)+fib(n-2) (n > 인 경우 : 1).

재귀 함수로 기록되는 것은 다음과 같습니다.

중간 섬유 (중간 섬유)

{if (n==0) 는 0 을 반환합니다.

If (n== 1) 는1을 반환합니다

(n> 1) 가 광섬유 (n- 1)+ 광섬유 (n-2) 를 반환하는 경우

}

재귀 알고리즘의 구현 과정은 재귀와 회귀의 두 단계로 나뉜다. 반복 단계에서 더 복잡한 문제 (규모 N) 의 해결은 원래 문제보다 더 간단한 문제 (크기가 N 미만) 의 해결로 밀려납니다. 위의 예와 같이 fib(n) 를 풀고 fib(n- 1) 와 fib(n-2) 를 푸십시오. 즉, fib(n- 1) 와 fib(n- 2) 를 계산하려면 fib(n- 1) 와 fib(n-2) 를 먼저 계산해야 합니다 Fib( 1) 와 fib(0) 가 계산될 때까지 1 과 0 의 결과를 즉시 얻을 수 있습니다. 재귀 단계에서는 재귀를 종료하는 경우가 있어야 합니다. 예를 들어 함수 fib 에서 N 이 1 과 0 일 때.

회귀 단계에서 가장 간단한 해법을 얻으면 fib( 1) 및 fib(0) 를 얻으면 fib(2) 의 결과를 반환하는 등 약간 복잡한 문제에 대한 해법을 단계적으로 반환합니다.

반복 함수를 작성할 때 함수의 로컬 변수 및 매개 변수에 대한 지식은 현재 호출 레이어로 제한됩니다. 단순 문제 레이어로 푸시되면 원래 레이어의 매개변수와 로컬 변수가 숨겨집니다. 일련의 단순 문제 레이어에는 모두 고유한 매개변수와 로컬 변수가 있습니다.

재귀로 인해 일련의 함수 호출이 발생하고 일련의 반복 계산이 있을 수 있으므로 재귀적 알고리즘은 비효율적입니다. 재귀 알고리즘을 재귀 알고리즘으로 쉽게 변환할 수 있는 경우 프로그램은 일반적으로 재귀 알고리즘에 따라 작성됩니다. 예를 들어, 위 예제에서 반복 알고리즘을 사용하여 피보나치 수열의 N 번째 항목에 대한 함수 fib(n) 를 계산해야 합니다. 즉, 피보나치 수열의 처음 두 항목부터 시작하여 원하는 N 번째 항목이 계산될 때까지 다음 항목을 하나씩 계산합니다.

문제 조합 문제

문제 설명: 자연수 1, 2 에서 r 수의 모든 조합을 구합니다. 예를 들어 n=5 와 r=3 의 모든 조합은 (1) 5,4,3 (

(4)5, 3, 2 (5)5, 3, 1 (6)5, 2, 1

(7)4, 3, 2 (8)4, 3, 1 (9)4, 2, 1

(10)3, 2, 1

나열된 10 조합을 분석하여 이 재귀 사상을 사용하여 조합 함수를 구하는 알고리즘을 고려할 수 있습니다. Void comb(int m, int k) 함수를 자연수 1, 2, ... 조합의 첫 번째 번호를 선택하면 다음 번호는 나머지 m- 1 개 중 k-입니다 이렇게 하면 M 의 수에서 K 를 구하는 조합 문제가 m- 1 의 수에서 k- 1 을 구하는 조합 문제로 변환됩니다. 함수를 작업 배열 a[] 에 도입하여 해결된 조합 수를 저장하고, 규칙 함수는 결정된 K 수 조합의 첫 번째 수를 a[k] 에 배치합니다. 조립품을 해석할 때 출력 [] 의 조립품. 첫 번째 숫자는 m, m- 1, ... 함수가 결정된 조합의 첫 번째 숫자를 배열에 넣은 후 두 가지 옵션을 사용할 수 있습니다. 조합의 나머지 요소가 제거되지 않았기 때문에 재귀적으로 결정됩니다. 또는 조합의 모든 요소가 확인되었기 때문에 조합을 출력합니다. 아래 절차의 함수 빗을 참조하십시오.

프로그램

# 포함

# maxn/kloc 정의-0/00

Int a [maxn];

빈 빗 (정수 m, 정수 k)

{int I, j;

For(I = m;; 나>= k;; 나-)

{a [k] = I;

If(k & gt;; 1)

빗 (I- 1, k-1);

기타

{for (j = a [0]; J>0; J-)

Printf("%4d ",a [j]);

Printf ("\ n");

}

}

}

Void main ()

{a [0] = 3;

빗 (5, 3);

}

배낭 문제

문제 설명: n 개의 서로 다른 값과 가중치를 가진 항목이 n 개의 항목 가운데 섹션 항목 선택 시나리오를 요청하여 선택한 항목의 총 가중치가 지정된 제한 가중치를 초과하지 않도록 하지만 선택한 항목의 값 합계가 가장 큽니다.

N 항목의 가중치를 각각 w0, w 1, …, wn- 1, 항목의 값은 각각 v0, v 1, …, VN-/klls 로 설정합니다 반복 검색 항목을 사용하는 선택 스키마입니다. 대체구성이 많다고 가정할 때, 전체 값이 가장 큰 구성표는 배열 option[] 에 저장되며, 이 구성표의 합계는 변수 maxv 에 저장됩니다. 현재 항목 선택이 배열 CP [] 에 저장되는 새로운 방안을 검토 중이다. 현재 시나리오가 이미 I- 1 항목을 고려했다고 가정하면 이제 I 항목을 고려해야 합니다. 현재 프로그램에 이미 포함된 항목 가중치의 합은 tw 입니다. 지금까지 다른 프로젝트도 선택할 수 있다면 이 방안이 달성할 수 있는 총가치의 기대치는 텔레비전이다. 알고리즘에 TV 를 도입할 때 현재 시나리오의 총 기대치가 이전 시나리오의 총 가치보다 작으면 현재 시나리오를 계속 조사하는 것이 무의미하게 되므로 현재 시나리오를 종료하고 즉시 다음 시나리오를 검토해야 합니다. 스키마의 합계가 maxv 보다 크지 않으면 스키마를 더 이상 검사하지 않기 때문에 함수를 찾은 후 찾은 스키마가 이전 스키마보다 우수함을 보장합니다.

제 I 조의 선택에 대해서는 두 가지 가능성이 있다.

(1) 첫 번째 항목이 선택된 것을 감안하면 이 가능성은 시나리오의 총 중량 제한을 초과하지 않는 경우에만 가능합니다. 선택이 완료되면 계속해서 다른 항목의 선택을 재귀적으로 고려합니다.

(2) I 항목이 선택되지 않은 것을 고려하면 I 항목이 없을 때 더 가치 있는 방안을 찾을 수 있는 경우에만 가능합니다 .....

위의 아이디어에 따라 다음과 같이 재귀 알고리즘을 작성하십시오.

Try (첫 번째 항목, 현재 선택이 달성한 가중치의 합계, 시나리오의 가능한 총 값 TV)

{/* 현재 프로그램에 포함 된 첫 번째 항목의 가능성을 고려하십시오 */

(첫 번째 항목을 포함하는 것이 허용 가능한 경우)

{현재 프로그램에 프로젝트 I 포함

만약 (나

시도 (i+ 1, tw+ 문장 I 의 무게, TV);

기타

/* 또 다른 완전한 방안. 이전 방안보다 더 좋고 최선이기 때문이다. */

현재 시나리오를 임시 모범 사례로 저장합니다.

복구 항목 I 에 포함되지 않은 상태

}

/* 현재 프로그램에 포함되지 않은 첫 번째 항목의 가능성을 고려합니다 */

만약 (첫 번째 항목을 제외하면 남성만 고려할 수 있다)

만약 (나

Try(i+ 1, tw, tv- I 항목의 값);

기타

/* 또 다른 완전한 방안. 이전 방안보다 더 좋고 최선이기 때문이다. */

현재 시나리오를 임시 모범 사례로 저장합니다.

}

위의 알고리즘을 이해하기 위해 몇 가지 예가 아래에 나와 있습니다. 가중치 및 값이 표에 표시된 네 가지 항목이 있습니다.

항목 0 1 2 3

무게 5 3 2 1

숫자 4 4 3 1

제한 무게를 7 로 설정합니다. 그런 다음 위의 알고리즘에 따라 다음 그림은 솔루션 프로세스입니다. 그림에서 볼 수 있듯이 일단 솔루션을 찾으면 알고리즘이 더 나은 솔루션을 찾을 수 있습니다. 검색 분기가 더 나은 해결책을 찾지 못할 것으로 확인되면 알고리즘은 해당 분기에서 검색을 계속하지 않고 분기를 즉시 종료하고 다음 분기를 조사합니다.

위의 알고리즘에 따라 작성된 함수 및 프로그램은 다음과 같습니다.

프로그램

# 포함

# 정의 번호 100

듀얼 limitW, totV, maxV

Int option[N], COP [n];

Struct {이중 가중치;

이중 값

} a [n];

Int n;;

Void find(int I, double tw, double TV)

{int k;;

/* 현재 프로그램에 포함 된 첫 번째 항목의 가능성을 고려하십시오 */

If (tw+a.weight < =limitW)

{COP =1;

만약 (나

기타

{for(k = 0;; K

Option [k] = COP [k];

Maxv = TV;

}

COP = 0;;

}

/* 현재 프로그램에 포함되지 않은 첫 번째 항목의 가능성을 고려합니다 */

If (TV-a.value > MaxV) 를 참조하십시오

만약 (나

기타

{for(k = 0;; K

Option [k] = COP [k];

Maxv = TV-a.value;

}

}

Void main ()

{int k;;

이중 w, v;

Printf ("입력 항목 수 \ n");

Scanf(("%d ",& ampn);

Printf ("각 항목의 무게와 가치 입력 \ n");

For (totv=0.0, k = 0;; K

{scanf("% 1f% 1f ",& ampw & amp;; 5);

A[k]. 무게 = w;;

A[k]. 값 = v;;

Tot v+= v;

}

Printf ("입력 제한 중량 \ n");

Scanf("% 1f ",& amplimitv);

Maxv = 0.0 입니다

For(k = 0;; Kfind (0,0.0, totv);

For(k = 0;; K

If (옵션 [k]) printf ("%4d", k+1);

Printf(" \ n 총 가치는% .2f \ n ",maxv);

}

대조적으로, 우리는 같은 문제 해결 아이디어로 비재귀적인 절차적 해법을 고려할 것이다. 솔루션 찾기 속도를 높이기 위해 프로그램은 단순히 모든 후보 솔루션을 하나씩 생성하는 것이 아니라 후보 솔루션에 대한 각 항목의 영향에서 더 고려할 만한 후보 솔루션을 형성합니다. 각 항목을 차례로 검사하여 후보 솔루션을 형성합니다. 제 1 조에 대한 고찰에는 몇 가지 상황이 있다. 이 조가 후보 방안에 포함되어 있고 여전히 방안의 총 중량 제한을 충족시킬 때, 후보 방안에 포함되면 계속 고려해야 한다. 반대로 이 프로젝트는 현재 형성되고 있는 후보 솔루션에 포함되지 않아야 합니다. 마찬가지로 항목이 후보 솔루션에 포함되지 않고 현재 임시 최적 솔루션보다 더 좋은 후보 솔루션을 찾을 수 있는 경우에만 해당 항목이 후보 솔루션에 포함되지 않은 것으로 간주됩니다. 한편, 이 프로젝트가 현재 후보 프로그램에 포함되지 않은 방안은 더 이상 고려되어서는 안 된다. 더 고려해야 할 모든 방안에 대해 프로그램은 다음 항목을 더 고려할 것이다.

프로그램

# 포함

# 정의 번호 100

이중 제한 w;

Intcop [n];

구조 요소 {이중 중량;

이중 값

} a [n];

Int k, n;

Struct {int

이중 tw;

이중 텔레비전

} twv [n];

다음 유효하지 않음 (int I, double tw, double TV)

{twv. = 1;

Twv.tw = tw

Twv.tv = TV

}

이중 찾기 (struct ele *a, int n)

{int I, k, f;

듀얼 maxv, tw, TV, totv

Maxv = 0;;

For (totv=0.0, k = 0;; K

Totv+=a[k] 입니다. 가치;

다음 (0,0.0, totv);

I = 0;;

While(I & gt;; =0)

{f=twv 입니다. 을 눌러 섹션을 인쇄할 수도 있습니다

Tw = twv.tw;

Tv = twv.tv;

스위치 (f)

{사례 1: twv. ++;

If (tw+a.weight < =limitW)

만약 (나

{다음 (i+ 1, tw+a.weight, TV);

I++;+;

}

기타

{maxv = TV

For(k = 0;; K

Cop[k]=twv[k] 입니다. ! =0;

}

깨뜨리다

사례 0: I-;

깨뜨리다

기본값: twv. =0;

If (TV-a.value > Maxv) 를 참조하십시오

만약 (나

{next(i+ 1, tw, TV-a.value);

I++;+;

}

기타

{maxv = TV-a.value;

For(k = 0;; K

Cop[k]=twv[k] 입니다. ! =0;

}

깨뜨리다

}

}

Maxv 로 돌아가기

}

Void main ()

{double maxv

Printf ("입력 항목 수 \ n");

Scanf(("%d ",& ampn);

Printf ("입력 제한 중량 \ n");

Scanf("% 1f ",& amplimitw);

Printf ("각 항목의 무게와 가치 입력 \ n");

For(k = 0;; K

Scanf("% 1f% 1f ",& ampa[k]. 무게 & ampa[k]. 값);

Maxv=find(a, n);

Printf(" \ n 선택한 항목은 \ n ");

For(k = 0;; K

If (옵션 [k]) printf ("%4d", k+1);

Printf(" \ n 총 가치는% .2f \ n ",maxv);

}

재귀의 기본 개념과 특징

프로그램이 자체 프로그래밍 기술을 호출하는 것을 재귀라고 합니다.

프로시저 또는 함수는 정의나 설명에서 직접 또는 간접적으로 자체 메서드를 호출합니다. 그것은 일반적으로 크고 복잡한 문제를 원래 문제와 비슷한 작은 문제로 바꾸어 해결한다. 재귀 전략은 문제 해결 과정에서 필요한 반복 계산을 적은 프로그램으로 설명할 수 있어 프로그램의 코드 양을 크게 줄일 수 있습니다. 재귀의 능력은 제한된 문으로 무한한 객체 집합을 정의하는 데 있다. 재귀 사상으로 작성된 프로그램은 종종 매우 간결하고 이해하기 쉽다.

일반적으로 재귀에는 경계 조건, 재귀적 전진 세그먼트 및 재귀적 반환 세그먼트가 필요합니다. 경계 조건이 충족되지 않으면 재귀적으로 추진됩니다. 경계 조건이 충족되면 재귀적으로 반환됩니다.

참고:

(1) 재귀는 프로시저 또는 함수에서 자신을 호출하는 것입니다.

(2) 증분 감소 정책을 사용할 때는 재귀 종료라는 명확한 재귀 종료 조건이 있어야 합니다.