본문 바로가기

알고리즘

[Algorithm] Recursive Practices



◈ n^m 구하기


#include<iostream>


using namespace std;


int getPower(int a,int b){

  // n^m을 반환하는 함수

  if(b==0) return 1;

  return getPower(a,b-1)*a;

}

int main() {


  //Please Enter Your Code Here

  int n,m;

  

  cin>>n>>m;  

  cout<<getPower(n,m);

  return 0;

}



가장 먼저 함수가 무엇인지 정의를 해야함.  


그리고 기저조건의 경우를 생각하자.


n^0 은 1이다.. 이게 기저조건임.


getPower가 된다고 가정하고!!!!!! return getPower(a,b-1)*a; 를 리턴한다.





◈ n 부터 m 까지의 합 구하기



#include <stdio.h>

int getSum(int a, int b){

   if(a == b) return a;

  else return getSum(a,b-1) + b;

   

}

 

int main() {


  //Please Enter Your Code Here

  int n,m,sum;

  scanf("%d %d",&n,&m);

  

  printf("%d",getSum(n,m));

  return 0;

}




◈ 각 자릿수의 합 

-> 10진수를 입력받아 각 자릿수의 합을 구하라..


  


위와 같이, 재귀적인 패턴을 파악해야 한다.

파악하기 위해선 작은 단위로 나누어 생각해본다.





#include <stdio.h>


// x의 각 자릿수의 합을 반환하는 함수

int getDigitSum(int n){

  if(0<=n && n<=9) return n;

  else return getDigitSum(n/10) + (n%10);

}

 

int main() {

  int x;

  scanf("%d",&x);

  printf("%d",getDigitSum(x));

  return 0;

}




◈ 십진수 N을 입력받아 각 자릿수의 합을 출력하시오.


#include <stdio.h>


// x의 각 자릿수의 합을 반환하는 함수

int getDigitSum(int n){

  if(0<=n && n<=9) return n;

  else return getDigitSum(n/10) + (n%10);

}

 

int main() {


  //Please Enter Your Code Here

  int x;

  

  scanf("%d",&x);

  printf("%d",getDigitSum(x));

  return 0;

}



◈ 이진수 출력하기


#include <stdio.h>


void printBinary(int n){

  // n을 이진수로 바꾸어 출력하는 함수

  if(n==0) printf("0");

  else if(n==1) printf("1");

  else{

    printBinary(n/2);

    printf("%d",n%2);

  }

}

int main() {


  int x;

  scanf("%d",&x);

  printBinary(x);

  return 0;

}

 


◈ 팰린드롬 판별


#include <stdio.h>

#include<string.h>


bool isPalindrome(char str[],int start, int end){

   // str의 start ~ end 이 팰린드롬이면 true, 아니면 false 반환

  if(start == end) return true;

  else if(start+1 == end){

    if(str[start] == str[end]){

      return true;

    }else{

      return false;

    }

  }

  else{

    if(str[start] == str[end]){

      return isPalindrome(str,start+1,end-1);

    }else{

      return false;

    }

  }

}

int main() {


  char str[100],len;

  scanf("%s",str);

  len = strlen(str);

  

  if(isPalindrome(str,0,len-1)){

    printf("YES");

  }else{

    printf("NO");

  }

  return 0;

}





'알고리즘' 카테고리의 다른 글

[Algorithm] 프랙탈 수  (0) 2019.02.06
[Algorithm] mountain  (0) 2019.02.06
[Algorithm] Recursive Function  (0) 2019.02.05
[Algorithm] 문자열 압축  (0) 2019.02.04
[Algorithm] 팰린드롬 조사  (0) 2019.02.03