>  기사  >  백엔드 개발  >  C#의 재귀 함수

C#의 재귀 함수

WBOY
WBOY원래의
2024-09-03 15:14:33390검색

C#의 재귀 함수에서 Recursion은 영어에서와 동일한 의미를 나타내는 것을 의미하며, 정확하게는 반복된다고 알려져 있습니다. 따라서 함수의 재귀적 특성은 동일한 작업을 반복적으로 수행하는 것을 의미합니다. 그리고 예, 프로그램이 올바르게 처리되지 않으면 프로그램이 연속 루프로 실행될 것입니다. 이러한 재귀 함수를 실행할 때 적절한 조건을 지정해야 합니다. 그렇지 않으면 함수가 자신을 계속해서 호출하여 프로그램이 계속 실행됩니다. 이제 C#에서 이러한 함수를 생성하는 방법을 살펴보겠습니다.

C#의 재귀 함수 구문

여기서의 구문은 C#의 기본 함수 구문과 동일합니다. 여기 좀 보세요.

C#의 재귀 함수

여기에는 특별한 구문이 없지만 반환 결과를 제공하면서 함수가 자신을 호출하는 것을 관찰할 수 있습니다. 그리고 우리는 멈추지 않고 실행되는 코드를 원하지 않기 때문에 해당 매개변수 값을 해당 재귀 함수에 전달할 때 매우 주의해야 합니다.

위 구문에는 return 문에서만 함수를 호출해야 하는 것과 같은 것이 없습니다. 오히려 재귀 함수 반환 값을 변수에 할당하고 해당 변수도 반환할 수도 있습니다.

인수분해 실행

여기서 재귀 함수를 생성하기 위한 기본 문제 설명인 인수분해를 살펴보겠습니다.

코드:

using System;
class First {
static void Main() {
int result;
result = fact(7);
Console.WriteLine("Factorial is : " + result);
}
public static int fact(int num)
{
if(num==0)
{
return 1;
}
return num*fact(num-1);
}
}

단계별 프로세스를 살펴보겠습니다.

  1. 먼저, 계승을 계산하려는 메인 함수에서 입력 값을 가져오기 위해 자체 매개변수화된 함수를 만들었습니다.
  2. 그런 다음 주어진 숫자가 0인지 확인하기 위해 if 조건을 만들었습니다. 숫자가 0이면 기본값으로 1을 반환합니다.
  3. 그렇지 않으면 현재 숫자에 숫자 빼기 1을 매개변수로 사용하는 함수를 곱합니다.
  4. 따라서 이 곱셈은 숫자 0에 도달할 때까지 반복됩니다. 기본적으로 0에 대한 반환 출력을 1로 기록했으며 최종 결과에 1을 곱합니다.

출력:

C#의 재귀 함수

이제 코드에서 함수 매개변수를 num 빼기 1에서 num으로 바꾸겠습니다.  이 경우 함수는 계속해서 자신을 호출하고 프로세스가 반복됩니다.

코드:

using System;
class First {
static void Main() {
int result;
result = fact(7);
Console.WriteLine("Factorial is : " + result);
}
public static int fact(int num)
{
if(num==0)
{
return 1;
}
return num*fact(num);
}
}

출력:

C#의 재귀 함수

위 출력을 통해 함수가 반복적으로 자신을 호출하는 스택 오버플로 예외를 명확하게 볼 수 있습니다. 첫 번째 프로그램에서는 강조표시된 부분만 변경되었습니다.

같은 방법으로 아래와 같이 숫자를 사용자가 입력한 값으로 만들 수 있습니다.

코드:

using System;
class First {
static void Main() {
int result,c;
string a;
Console.Write("Enter value for number :");
a = Console.ReadLine();
c = Convert.ToInt32(a);
result = fact(c);
Console.WriteLine("Factorial is : " + result);
}
public static int fact(int num)
{
if(num==0)
{
return 1;
}
return num*fact(num-1);
}
}

출력:

C#의 재귀 함수

0을 입력으로 주면 어떻게 될까요? 네, 한 개는 돌려드리겠습니다.

출력:

C#의 재귀 함수

이제 음수를 주면 어떨까요?

출력:

C#의 재귀 함수

계속 재귀 함수가 실행될 때마다 매개변수 값을 감소시키기 때문에 스택 오버플로 예외도 발생했습니다. 따라서 음수는 -6, -7, -8 등으로 줄어듭니다. 이것이 우리가 이 예외를 적용하는 이유입니다.

연습으로 음수에 대한 재귀 함수를 만들어 볼 수 있나요?

힌트: 0보다 작은 숫자의 사전 조건을 취하고 0이 올 때까지 재귀 함수 매개변수에 1을 추가할 수 있습니다.

C#의 재귀 함수 예

재귀 함수와 관련하여 인용할 수 있는 몇 가지 좋은 예가 있습니다.

이러한 재귀 함수를 사용할 수 있는 다른 곳도 몇 군데 있습니다.

  • 주어진 시작점과 끝점에서 숫자를 연속적으로 인쇄합니다. (아래 프로그램)
  • 주어진 시작점에서 시작하여 숫자를 더하고 끝점에서 멈추거나 특정 합계에 도달하면 중지합니다.
  • 특정 범위의 특정 숫자로 나누어진 숫자를 인쇄하세요.
  • 문장을 작성한 후 연속된 선이나 점의 수 등을 인쇄하고 싶습니다.

보시다시피 재귀 함수는 루프의 기능과 유사하지만 동일한 함수를 반복적으로 호출한다는 점이 다릅니다.

프로그램이 입력으로 주어진 두 번째 숫자를 찾을 때까지 계속해서 숫자를 추가하는 재귀 함수를 작성하는 방법을 살펴보겠습니다.

코드:

using System;
class First {
static void Main() {
int result,c,d;
string a,b;
Console.Write("Enter value for 1st number :");
a = Console.ReadLine();
c = Convert.ToInt32(a);
Console.Write("Enter value for 2nd number :");
b = Console.ReadLine();
d = Convert.ToInt32(b);
result = add(c,d);
Console.WriteLine("Add is : " + result);
}
public static int add(int num1,int num2)
{
int sum ;
sum=num1;
if (num1 < num2 )
{
num1++;
sum=sum+add(num1,num2);
return sum;
}
return sum;
}
}

우리가 한 일은 다음과 같습니다.

  • 사용자 입력을 통해 두 개의 숫자 num1과 num2를 가져왔습니다
  • 추가 기능은 num1부터 시작하여 num2가 될 때까지 숫자를 추가합니다.

예를 들어 num1 = 5, num2 = 8을 취하면 출력 합계는 5+6+7+8, 즉 26이 됩니다.

출력:

C#의 재귀 함수

그리고 num1을 num2보다 적게 주면 어떻게 될까요?

출력:

C#의 재귀 함수

처음처럼 num1 값을 주고, sum 값을 num1 값에 할당하고 if 문을 적용할 수 없으면 sum을 반환합니다.

연습으로 특정 조건을 따를 때까지 "I likecoding"을 인쇄하는 재귀 함수를 작성할 수 있나요?

힌트: 위 프로그램에서 추가하는 것과 동일한 절차를 따를 수 있습니다.

결론

여기서 우리는 재귀 함수의 실행, 이러한 함수의 호출 방법 및 그에 대한 몇 가지 예를 성공적으로 얻었습니다. 또한 함수 호출의 단순한 차이로 인해 프로그램이 경계를 벗어나 예외가 발생할 수 있는 방법도 배웠습니다.

위 내용은 C#의 재귀 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:C#의 수학 함수다음 기사:C#의 수학 함수