/*x^n 값은 32767보다 작아야 합니다. 그렇지 않으면 출력은 음수가 됩니다. 이는 int 유형의 값 범위가 제한되어 있기 때문입니다. 일반 pow 함수는 일반적으로 float 또는 double 유형을 사용하고 매개변수도 float 또는 double 유형이어야 합니다. */
#포함
int power(int x,int n)
{
만약 (n>1)
{
return x*power(x,n-1);
}
그밖에
{
만약 (n>0)
반품x;
그밖에
반환 1;
}
}
void main()
{
int x,n;
printf("input x,n:");
scanf("%d%d",&x,&n);
printf("%d",power(x,n));
getch();
clrscr();
}
귀하의 재귀 프로그램이 잘못되었습니다. 설명과 함께 올바른 프로그램을 전송해 드리겠습니다.
언어 함수의 재귀 및 호출
1. 기본 콘텐츠:
C 언어의 함수는 재귀적으로 호출할 수 있습니다. 즉, 직접(단순 재귀) 또는 간접적으로(간접 재귀) 호출할 수 있습니다.
포인트:
1. C 언어 함수는 재귀적으로 호출될 수 있습니다.
2. 직접 또는 간접적으로 호출할 수 있습니다. 현재는 직접 재귀 호출만 논의됩니다.
2. 재귀 조건
재귀적 방법을 사용하여 문제를 해결하려면 다음 세 가지 조건을 충족해야 합니다.
1. 해결해야 할 문제는 새로운 문제로 변환될 수 있으며, 이 새로운 문제에 대한 해결책은 처리되는 객체가 정기적으로 증가하거나 감소한다는 점을 제외하면 여전히 원래 솔루션과 동일합니다.
참고: 문제를 해결하는 방법은 동일합니다. 함수를 호출하는 매개변수는 매번 다릅니다(정기적인 증가 또는 감소). 패턴이 없으면 재귀 호출을 적용할 수 없습니다.
2. 이 변환 프로세스를 적용하여 문제를 해결할 수 있습니다.
참고: 다른 방법을 사용하면 번거롭거나 해결하기 어렵지만 재귀적 방법을 사용하면 문제를 잘 해결할 수 있습니다.
3. 재귀를 종료하려면 명확한 조건이 있어야 합니다.
참고: 적절한 위치에서 재귀 호출을 종료해야 합니다. 그렇지 않으면 시스템이 충돌할 수 있습니다.
3. 재귀적 예
예: 재귀적 방법 n 사용!
n>1이면 n! 문제는 n*(n-1)으로 변환될 수 있습니다! 새로운 질문.
예: n=5:
1부: 5*4*3*2*1 n*(n-1)!
2부: 4*3*2*1 (n-1)*(n-2)!
3부: 3*2*1 (n-2)(n-3)!
4부: 2*1(n-3)(n-4)!
파트 5: 1(n-5)! 5-5=0, 값 1을 얻고 재귀를 종료합니다.
소스 프로그램:
fac(int n)
{int t;
if(n==1)||(n==0) 1을 반환합니다;
그밖에
{ t=n*fac(n-1);
반납 t;
}
}
메인( )
{int m,y;
printf(“m을 입력하세요:”);
scanf(“%d”,&m);
if(m
그밖에
{y=fac(m);
printf(“n%d! =%d n”,m,y);
}
}
4. 재귀 설명
1. 함수가 호출되면 시스템은 함수의 현재 변수와 형식 매개변수를 일시적으로 유지합니다. 시스템은 새로 호출된 함수에서 사용되는 변수와 형식 매개변수에 대한 다른 위치를 엽니다. . 저장 장치(메모리 공간). 각 함수 호출에 사용되는 변수는 서로 다른 메모리 공간에 있습니다.
2. 재귀 호출 수준이 높을수록 동일한 이름을 가진 변수가 차지하는 저장 단위가 늘어납니다. 함수가 호출될 때마다 시스템은 함수 변수를 위한 새로운 메모리 공간을 연다는 점을 기억하는 것이 중요합니다.
3. 이번에 호출된 함수가 종료되면 시스템은 이 호출이 차지한 메모리 공간을 해제합니다. 프로그램 흐름은 이전 계층의 호출 지점으로 돌아가는 동시에 이 계층에 들어갈 때 함수의 변수 및 형식 매개변수가 차지하는 메모리 공간의 데이터를 얻습니다.
4. 모든 재귀적 문제는 비재귀적 방법으로 해결할 수 있지만, 더 복잡한 재귀적 문제의 경우 비재귀적 방법을 사용하면 프로그램이 매우 복잡해지고 읽기 어려워지는 경우가 많습니다. 이러한 문제를 해결하는 데 매우 유용합니다. 이는 더 나은 가독성으로 프로그램을 간결하고 명확하게 만들 수 있습니다. 그러나 재귀 호출 프로세스 중에 시스템은 각 호출 계층의 변수에 대한 메모리 공간을 열어야 하며 각 호출 계층 이후의 반환 지점을 기억해야 합니다. 많은 추가 오버헤드를 추가하므로 함수에 대한 재귀 호출은 일반적으로 프로그램의 실행 효율성을 감소시킵니다.
5. 절차
fac(int n) /*각 호출마다 다른 매개변수 사용*/
{ int t; /* 각 호출은 변수 t*/
에 대해 다른 메모리 공간을 엽니다.if(n==1)||(n==0) /*이 조건이 충족되면 1을 반환합니다 */
반환 1;
그밖에
{ t=n*fac(n-1); /*여기에서 프로그램이 실행될 때마다 이 함수는 n-1을 매개변수로 다시 호출됩니다*/
return t; /*이전 문장에서 호출된 모든 프로세스가 종료된 경우에만 여기에서 실행합니다. */
}
}
위 내용은 C 언어로 power 함수를 재귀적으로 구현하고 이를 main 함수에서 호출합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!