문제링크 : http://codeup.kr/JudgeOnline/problem.php?id=1905



해결방법 :

정수 이 입력으로 들어오면 부터 까지의 합을 재귀함수로 구현해야한다.

따라서 재귀함수를 구현하기 위해 다음을 설계해야한다.


1.기저조건

2.재귀처리구문 


기저조건은 입력 n이 1이하인 것이고 그때는 n을 리턴한다.


재귀처리는 n(현재 숫자) + f(n-1) (하나 전의 숫자까지의 1부터 총합) 을 하면 우리가 구하고자하는 1부터 n까지의 합을 구할 수 있다.

여기서 재귀함수인 f(n-1)은 우리가 원하는 값을 리턴해준다는 것을 가정해두고 설계한다. (실제 직접따라 들어가보면 값을 구해준다. 신기신기)

이렇게 가정하고 설계해도 답을 구하는 것은 귀납적인 식으로 설정해두었기 때문에 오류가 안나는 것이다.

그 이유는 기저조건을 세웠고(처음오는 자연수에 대한 증명), f(n-1)과 f(n)은 같은 방식(n이만족되면 n+1도 맨족..)으로 구해나가기 때문에 귀납적 증명을 한 것과 동일하기때문이다. 


다음 수학 귀납법 설명 참조

모든 자연수가 어떤 성질을 만족시킨다는 명제에 대한 수학적 귀납법을 통한 증명은 다음과 같은 두 단계로 구성된다.

  1. 처음 오는 자연수(0 또는 1)에 대한 증명
  2. 이 만족시킨다는 가정 아래, 에 대한 증명


소스코드)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
int sumFromN(int n)
//1부터 n까지 총합을 리턴하는 함수
   if(n<=1)
       return n;
   else
     return n+sumFromN(n-1); 
}
 
int main()
{
  int n;
  cin >> n;
  printf("%d\n", sumFromN(n));
  return 0;
}
cs


반응형

'PS > 코드업' 카테고리의 다른 글

3704번 계단 오르기 2  (0) 2019.03.31
1920번 2진수 변환 (재귀함수)  (0) 2019.03.16
3733번 우박수 길이 - large  (0) 2019.01.27
2606. 소수점 이하 출력  (0) 2018.12.17
코드업-캔디팡 문제  (0) 2018.09.23

+ Recent posts