C 언어 귀속 시리즈 의 깊이 있 는 정리

귀착 하 다
뭐 공부 해요?
재 귀 는 쉽게 말 하면 함수 가 스스로 자신 을 그림 과 같이 호출 하 는 것 이다.

그러나 재 귀 는 간단 한 자신 이 자신 을 호출 하 는 과정 이 아니 라 전달 과 회귀 로 나 뉘 는데 전달 은 주황색 화살표 가 돌아 오 면 검은색 화살표 이다.이것 이 바로 재 귀 이다.
계산 단 계 를 예 로 들 면,우리 가 6 을 입력 하여 6 을 계산 하 는 단 계 를 예 로 들 면

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int factorial(int x) //     
{
	if (x == 1)
	{
		return 1; 
	}
	return x * (factorial(x - 1));
}
int main()
{
	int i = 0;
	scanf("%d", & i);
	int k = factorial(i);
	printf("%d", k);
	return 0;
}
구체 적 인 실현 과정 은 다음 과 같다.

재 귀적 특징 구조 적 단점

재 귀적 본질
전달 하 는 과정 에서 문 제 를 간소화 하 는 과정 에서 간단 한 문 제 를 해결 할 것 이다.
재 귀적 응용
(1).문제 의 정 의 는 귀속 에 따라 정의 된다(Fibonacci 함수,단계,...).
(2).문제 의 해법 은 재 귀적 인 것 이다.(어떤 문 제 는 재 귀적 인 방법 으로 만 해결 할 수 있다.예 를 들 어 한 노 타 문제,...)
(3).데이터 구 조 는 재 귀적 인 것 이다(링크,트 리 등의 조작 은 나무의 옮 겨 다 니 기,나무의 깊이 를 포함한다.)
실전 에 복귀 하 다
활용 단어 참조
단계 곱 하기 귀속 해법

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int factorial(int x) //    
{
	if (x == 1)//     
	{
		return 1; 
	}
	return x * (factorial(x - 1));// x!   X*((x-1)!)          
}
int main()
{
	int i = 0;
	scanf("%d", & i);
	int k = factorial(i);
	printf("%d", k);
	return 0;
}
단계 곱 하기 일반 해법

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int k = 0;
	scanf("%d", &k);
	int i = 0;
	int sum = 1;
	for (i = 1; i < k + 1; i++)
	{
		sum = sum * i; //           
	}
	printf("%d", sum);
	return 0;
}
피 폴 라 치 수열
피 폴 라 치 수열 은 0,1,1,2,3,5,8,13,21,34 이다.

피 폴 라 치 수열 재 귀 해법
재 귀 해법 은 수학 함수 정 의 를 통 해 그의 재 귀 체 를 쉽게 얻 을 수 있다.
n>1 시 fib(n-2)+fib(n-1)
귀환 출구 는 n=0 귀환 0,n=1,귀환 1

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int fib(int x) // 0    0       1
{
	if (x == 0)
	{
		return 0;

	}
	else if (x == 1) //  
	{
		return 1;
	}
	else
		return fib(x - 2) + fib(x - 1); //    
}


int main()
{
	int k = 0;
	scanf("%d", &k);
	int sum = fib(k);
	printf("%d", sum);
	return 0;
}
피 폴 라 치 수열 일반 해법

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int fib(int x)
{
	int i = 0;
	int j = 1;
	int k = 0;
	int m = 0;
	for (m = 0; m < x-1; m++)
	{
		k = i + j;
		i = j;
		j = k;
	}
	return k;
}

int main()
{
	int k = 0;
	scanf("%d", &k);
	int sum = fib(k);
	printf("%d", sum);
	return 0;
}
한 노 타
한 노 타 에 대한 간단 한 이해
한 숫자의 한 분 한 분 을 출력 하 다
1234 를 입력 하면 1,2,3,4 를 출력 합 니 다.
일반 해법
여기 서 숫자 를 맞 추 는 방법 으로 몇 자리 가 있 는 지 순서대로 10 제곱 을 나 누 면 된다.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
void elect(int x)
{
	printf("    ");
	float k = 0.1;
	int m = 0;
	do
	{
		m = x % 10;
		k = k * 10;
		printf("%d %f ",m,k);
		x = x / 10;
		if (x < 9)
		{
			k = k * 10;
			printf("%d %f ", m, k);
			break;
		}
	} while (1);
	printf("

"); } void elect2(int x) { printf(" "); int digit = log10(x) ; int i = 0; int m = 0; for (i = pow(10, digit); i >0; i = i / 10) { m = x / i; printf("%d ", m); x = x % i; } } int main() { int k = 0; scanf("%d", &k); //elect(k); elect2(k); return 0; }
재 귀 해법

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void elect(int x)
{ 

	if (x > 9)
	{
		elect(x / 10); //        10             
		
	}
	printf("%d ", x % 10);//  

}
int main()
{
	int k = 0;
	scanf("%d", &k);
	elect(k);
	return 0;
}
역순 저장 문자열
역순 인쇄 가 아 닌 매개 변수 문자열 의 문 자 를 역방향 으로 배열 합 니 다.
재 귀 해법

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
#include<stdio.h>
#include<string.h>
void reverse_string(char arr[])
{
	int sz = strlen(arr);
	int tmp = *arr;
	*arr = *(arr + sz - 1); //           
	*(arr + sz - 1) = '\0';//         0
	if (strlen(arr) > 1)//              
	{
		reverse_string(arr + 1);
	}
		
	
	*(arr + sz - 1) = tmp;
}
int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s
", arr); }
총결산
여기 서 C 언어 재 귀 시리즈 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 재 귀 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기