728x90
#include <stdio.h>
#include <stdlib.h>
int temp = 0;

int recursive_fibonacci(int n,int temp) {
	if (n == 1) {
		return 1;
	}
	else if (n == 0) {
		return 0;
	}
	else
		temp = recursive_fibonacci(n - 1,temp) + recursive_fibonacci(n - 2,temp);
}
int loop_fibonacci(int n) {
	int* arr;
	arr = (int*)malloc(sizeof(int) * (n+1));
	memset(arr, 0, sizeof(int) * (n+1));
	
	if (n > 1) // 만약 n이 1 이하일 경우, 메모리 침범
		arr[0] = 0, arr[1] = 1;  //index주의! 첫번째 피보나치, 두번째 피보나치 값은 각각 1. 
	else if (n == 0)
		return 0;
	else if (n == 1)
		return 1;

	for (int i = 2; i <= n; i++) {
		arr[i] = arr[i - 1] + arr[i - 2];
	}
	return arr[n];
}
int main() {
	int input;
	printf("input : ");
	scanf_s("%d", &input);
    if(input < 0)
    	return -1;

	printf("recursive_fibonacci(%d) = %d\n", input, recursive_fibonacci(input, temp));
	printf("loop_fibonacci(%d) = %d\n",input, loop_fibonacci(input));
}
728x90

'자료구조론' 카테고리의 다른 글

ackermann  (0) 2023.04.03
factorial  (0) 2023.03.30
check_perfectNumber  (0) 2023.03.30
binomial_coefficient  (0) 2023.03.30
비둘기 집  (0) 2023.03.30
728x90
#include <stdio.h>
int recursive_factorial(int n, int result) {
	result *= n;
	if (n == 1)
		return result;
	recursive_factorial(n - 1,result);
}/**재귀함수에 무한 루프를 사용하면, 재귀하는 만큼 무한루프가 겹친다.*/
int loop_factorial(int n, int result) {
	while (n > 0) {
		result *= n;
		n--;
	}
	return result;
}

int main() {
	int input, result = 1;
	scanf_s("%d", &input);
	if (input == 0) {
		printf("1\n");
	}
	else if (input < 0) {
		printf("음수의 계승은 정의되지 않았습니다.\n");
	}
	else {
		printf("recursive : %d\n", recursive_factorial(input, result));
		printf("loop : %d", loop_factorial(input, result));
	}
}
728x90

'자료구조론' 카테고리의 다른 글

ackermann  (0) 2023.04.03
fibonacci  (0) 2023.03.30
check_perfectNumber  (0) 2023.03.30
binomial_coefficient  (0) 2023.03.30
비둘기 집  (0) 2023.03.30
728x90
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_perfectNumber(int n) {/**본인의 제수의 합이 본인이 되는지 확인하는 함수*/
	int* arr;
	arr = (int*)malloc(sizeof(int) * n);
	//memset(arr, 0, sizeof(arr));//처음에 이렇게 적었는데, 이는 배열의 크기가 아닌 포인터 변수의 크기를 가져오므로 올바르지 않다.
	memset(arr, 0, sizeof(int) * n);


	int index = 0; //제수의 스택값, 하나 찾을때 마다 하나씩 증가
	int count = 0; //제수의 총 합을 저장하는 공간
	for (int i = 1; i < n; i++)//본인 자신은 제수가 아니라 n은 제외
	{
		if (n % i == 0) {
			arr[index] = i;
			index++;
		}
	}
	for (int i = 0; i < n; i++) {
		count += arr[i];
	}

	if (count == n)
		return 1;
	else
		return 0;
}

int main() {
	int input;
	int arr[5] = { 0 };
	int n = 5;
	printf("수를 입력하세요\n");
	scanf_s("%d", &input);
	if (check_perfectNumber(input))
		printf("완전수 입니다.\n");
	else
		printf("완전수가 아닙니다.\n");

}
728x90

'자료구조론' 카테고리의 다른 글

ackermann  (0) 2023.04.03
fibonacci  (0) 2023.03.30
factorial  (0) 2023.03.30
binomial_coefficient  (0) 2023.03.30
비둘기 집  (0) 2023.03.30
728x90
#include <stdio.h>
int recursive_binomial_coefficient(int n, int r, int temp)
{
	if (r == 1) {
		temp += n;
		return temp;
	}
	else if (n == r) {
		temp++;
		return temp;
	}
	else if (n < r) {
		printf("r can't be larger than n\n");
		return -1;
	}
	temp = recursive_binomial_coefficient(n - 1, r, temp) + recursive_binomial_coefficient(n - 1, r - 1, temp);
}
int loop_binomial_coefficient(int n, int r) {//해당 함수는 입력값에 따라 변수의 overflow 가능성이 있습니다.
	int result = 0;
	if (n > r) {
		long long denominator = 1, numerator1 = 1, numerator2 = 1;
		for (int i = 1; i <= n; i++) {
			denominator *= i;
		}
		for (int i = 1; i <= r; i++) {
			numerator1 *= i;
		}
		for (int i = 1; i <= n - r; i++) {
			numerator2 *= i;
		}
		result = denominator / (numerator1 * numerator2);
	}
	else if (n == r) {
		result = 1;
	}
	else
		return -1;

	return result;
	
	
}
int main() {
	int n,r,temp = 0; 
	printf("intput n, r\n");
	scanf_s("%d %d", &n, &r);
	if (recursive_binomial_coefficient != -1)
	{
		printf("(recursive)%d Combination %d : %d\n", n, r, recursive_binomial_coefficient(n, r, temp));
		printf("(loop)%d Combination %d : %d\n", n, r, loop_binomial_coefficient(n, r));
	}

	else
		printf("Error\n");
}
728x90

'자료구조론' 카테고리의 다른 글

ackermann  (0) 2023.04.03
fibonacci  (0) 2023.03.30
factorial  (0) 2023.03.30
check_perfectNumber  (0) 2023.03.30
비둘기 집  (0) 2023.03.30
728x90
/*임의의 함수 f
x: 입력 0 ~ 100

f(x) = f(y)인 값을 찾으면 반환
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#define FUNC(x)(x*x - 100*x +8)
#define MAX 30
int main() {
	int random_num;
	int count = 0;
	srand(time(NULL));


	int domain[MAX] = {0};
	int range[MAX] = {0};


	start : while(count < MAX)
			{
				random_num = rand() % 100; //임의의 정의역 하나 생성
				for (int i = 0; i < count; i++) {
					if (domain[i] == random_num) { //정의역에 해당 원소가 이미 있을때
						goto start;//다시 생성
					}
				}
				domain[count] = random_num;
				count++;//생성한 정의역 개수 기록
			}

			for (int i = 0; i < MAX; i++) {
				range[i] = FUNC(domain[i]);
			} // 공역 값 할당

			for (int i = 0; i < MAX; i++) {
				for (int j = i; j < MAX; j++) {
					if (range[i] == range[j] && i != j) {
						printf("a = %d, b = %d\n", domain[i], domain[j]);
						goto END; //하나만 찾을때
					}
				}
			}
			//return 0; //모두 찾을때
			printf("No answers...\n");
		END:;

}

코드에 문제점이나 수정하면 좋을 부분을 아신다면 피드백 부탁드립니다!

728x90

'자료구조론' 카테고리의 다른 글

ackermann  (0) 2023.04.03
fibonacci  (0) 2023.03.30
factorial  (0) 2023.03.30
check_perfectNumber  (0) 2023.03.30
binomial_coefficient  (0) 2023.03.30

+ Recent posts