반응형
배열요소의 합을 구하는 반복함수
//배열의 합을 구하는 함수
#include<iostream>
using namespace std;
float Sum(float* a, const int n) {
float s = 0.0;
for (int i = 0; i < n; i++) s = s + a[i];
return s;
}
int main() {
float arr[] = { 1,3,4,5 };
int size = 4;
cout<<Sum(arr, size);
}
float Sum(float* a, const int n) 함수의 구조를 팍팍 파악해보자. 실수형 자료형 float인 함수 Sum()은 매개변수로 float*a와 const int n을 가지고있다. main함수에서는 실수형 배열요소를 가진 배열과 배열요소의 갯수 n이 지역변수로 존재한다.
함수의 구조로 들어가보면, 실수 s를 0.0으로 초기화한 후에 i가 0부터 n-1일 때까지 s+=a[i];를 실행한다.
그러고, s를 반환하는 함수이다.
그래서 그냥 배열의 요소를 차례 차례 s에 더해 13을 반환한다.
배열요소의 합을 구하는 재귀함수
//배열의 합을 구하는 재귀함수
#include<iostream>
using namespace std;
float Rsum(float* a, const int n) {
if (n <= 0) return 0.0;
else return (a[0] + Rsum(&a[1], n - 1));
}
int main() {
float arr[] = { 1,3,4,5 };
int size = 4;
cout<<Rsum(arr, size);
}
위 함수는 재귀함수이다. n이 0보다 작거나 같을 때 0.0을 반환한다. 하지만 n이 0보다 클 때는 a[0] + Rsum(&a[1], n-1) 을 반환한다. 잘 이해가 안되니 main함수로 가보자.
1+Rsum(arr[1]인 3의 메모리주소,3)를 반환한다.
음.. Rsum(&a[1],n-1) 하면, 그냥 크기가 n-1이고 배열의 시작의 주솟값이 기존 배열의 a[1]의 주솟값인 새로운 배열로 탄생하나보다. 이해했다.와 이거 이해하는데 진짜 오래걸렸다. 하지만 자학은 하지말자. 그럴시간이 없다ㅠㅠ
암튼 맨 처음에
1. 1+Rsum(&arr[1],3)를 반환한다.
2. 1+ 3+Rsum(새로운 배열의&arr[1],2)을 반환한다.
3. 1+3+ 4+Rsum(새로운 배열의 &arr[1],1)을 반환한다.
4. 1+3+4+5+Rsum(새로운 배열의 &arr[1],0)을 반환한다.
5. 1+3+4+5+0 을 반환한다.
그래서 13이 나온다.
시간복잡도 비교하기
아!!!! 드디어 함수를 풀긴 풀었으니 원래 목적이었던 시간복잡도를 비교해보자. 이 시간복잡도 비교하는게 사실상 내 자료구조 시험의 첫번째 범위인건데 난 지금 시험이 23.10.26인데 시험 나흘 전에 이제 이걸 나가고있다. 올리는 건 아마 예약발행으로 27일날 올라갈듯. 그 땐 시험도 본 후겠지.. 그래도 지금이라도 나가는게 어디냐. 화이팅!!!! 시작해보자
1. 반복문에서 float s= 0.0;, int i=0;, return s; 와 같이 1회 초기화하거나 반환하는 식은 상수로 따진다. 따라서 3.
for(int i=0; i<n;i++) s=s+a[i]; 에서 초기화하는 int i=0;을 제외하고 i<n; ,i++ , s =, s+, a[i]총 5개 항은 n회 반복한다. 따라서 5n+3
2. 재귀함수에서 1회 반환하는 return 0.0; 을 상수로 따져 상수 1,
if(n<=0) , return (a[0]+Rsum(&a[1], n-1)); 은 n번 반복되는 항의 갯수가 6개이므로 6n+1
반응형
'data lab' 카테고리의 다른 글
HTML 기본 태그 모음 알아보기 (0) | 2023.12.30 |
---|---|
HTML 기본 기능 태그 알아보기 (0) | 2023.12.29 |
사업을 한다는 것은 어떤 의미일까 - 현금흐름, 의사결정 게임 과 실행 (0) | 2023.10.30 |
C++ 포인터 개념 잡기 - 배열 관련 개념 (0) | 2023.10.26 |
C++ 순열(permutation) - 대학교 컴공 2학년 자료구조 과목 (0) | 2023.10.25 |