귀속,

2531 단어 프로그래밍
1. 귀속 과정의 집행은 항상 하나의 과정체가 집행을 끝내지 않고 이번 집행의 결과를 가지고 또 다른 과정체의 집행에 들어간다.이렇게 반복하고 깊이 들어가면 어떤 과정의 집행 과정이 호출을 중지하는 조건이 성립될 때까지 더 이상 깊이 들어가지 않고 이번 과정체의 나머지 부분을 집행한 다음에 지난번 호출의 과정체로 돌아가 나머지 부분을 집행한다.이렇게 반복해서 시작 위치로 돌아와야만 전체 귀속 과정의 집행을 끝내고 해당하는 집행 결과를 얻을 수 있다.귀환 과정의 핵심은 바로 이런 집행 절차를 참조하여'점차적으로 깊이 들어가고 점차적으로 되돌아간다'는 데 적합한 귀환 호출 모델을 설계하여 실제 문제를 해결하는 것이다.
귀속 알고리즘은 귀속 상황과 기저 상황 두 가지를 포함해야 한다.귀속 상황이 끝까지 변하려면 반드시 기저에 도달해야 한다.역귀함수에는 저효율 문제라는 타고난 문제가 있는데 이것은 피할 수 없는 것이다.
귀속 함수는 일반적으로 다음과 같은 주요 몇 가지 요소를 주목한다. 퇴출 조건, 매개 변수가 무엇인지, 귀환 값이 무엇인지, 국부 변수가 무엇인지, 전역 변수가 무엇인지, 언제 출력되는지, 창고가 넘치지 않는지.
예:
4
#include 
using namespace std;
int mystrlen(char *buf,int N)
{
    if (buf[0]==0||N==0)
        return 0;
    else if(N==1)
        return 1;
   int t = mystrlen(buf,N/2);
  if(t
양휘삼각형을 구하고 순환과 귀속 대비를 구한다. 예:
      
4
#include 

using namespace std;

#define RECURSION 0
#define NO_RECURSION 1

#if RECURSION
int f(int m, int n)
{
	if (1 == m)
	{
		return n;
	}
	if (1 == n)
	{
		return m;
	}
	return f(m - 1, n) + f(m, n - 1);
}
#endif

#if NO_RECURSION
int f(int m, int n)
{
	int a[100][100];
	for (int i = 0; i != m; ++i)
		a[i][0] = i + 1;
	for (int i = 0; i != n; ++i)
		a[0][i] = i + 1;
	for (int i = 1; i != m; ++i)
		for (int j = 1; j != n; ++j)
			a[i][j] = a[i - 1][j] + a[i][j - 1];
	return a[m - 1][n - 1];

  }

#endif

int main()
{
	cout << f(5, 5) << endl;
	system("pause");
	return 0;
}
zigzag 배열을 구하고 순환을 이용하여 다음과 같이 한다.
#include 
#include 

using namespace std;
int main()
{
	int N;
	int s, i, j;
	int squa;
	cin >> N;
	int **a = (int **)malloc(N * sizeof(int));
	if (a == NULL)
		return 0;
	for (i = 0; i < N; i++)
	{
		if ((a[i] = (int *)malloc(N * sizeof(int))) == NULL)
		{
			while (--i >= 0)
				free(a[i]);
			free(a);
			return 0;
		}
	}

	squa = N*N;
	for (i = 0; i < N; ++i)
	{
		for (j = 0; j < N; j++)
		{
			s = i + j;
			if (s < N)
				a[i][j] = s*(s + 1) / 2 + (((i + j) % 2 == 0) ? i : j);
			else
			{
				s = (N - 1 - i) + (N - 1 - j);
				a[i][j] = squa - s*(s + 1) / 2 - (N - (((i + j) % 2 == 0) ? i : j));
			}

			
		}
	}
	for (i = 0; i < N; i++)
	{
		for (j = 0; j < N; j++)
			printf("%6d", a[i][j]);
		    printf("
"); } system("pause"); return 0; }

좋은 웹페이지 즐겨찾기