레이블이 피보나치인 게시물을 표시합니다. 모든 게시물 표시
레이블이 피보나치인 게시물을 표시합니다. 모든 게시물 표시

2016년 7월 16일 토요일

c언어 자료구조론 - 피보나치수열2 (구조체사용)

2009-04-26

high-ordered recursion으로 구성되어 시간복잡도가 컸던 함수를

이전 게시글에 있는 피보나치수열과 마찬가지로 linear recursion으로 구성한것이에용.

이전과는 다르게 구조체를 사용하여 표현하였습니다.


#include <stdio.h>
typedef struct{
 int n0;
 int n1;
}Two;   // 구조체선언할때도 ;를 붙이는구낭...

Two fib(int n){

 Two bef;
 Two pre;

 if(n<2){
  bef.n0=0;
  bef.n1=1;
  return bef;}   // }뒤에 ;있어도 같은결과를 출력
 bef=fib(n-1);
 pre.n0=bef.n1;
 pre.n1=bef.n0+bef.n1;
 return pre;}

void main(){
 int n;
 Two tem;
 printf("피보나치수열의 n번째항을 구해드립니당.\nn을 입력하세요.\n");
 scanf("%d",&n);
 tem=fib(n);
 printf("피보나치수열의 %d번째 항은 %d입나다.^3^\n",n,tem.n1);
}

c언어 피보나치수열

2009.04.06작성

재귀함수를 사용한 피보나치 수열이당.

binary recursion으로 작성된 피보나치 함수의 비효율성을 개선한 Linear recursion 방식의 피보나치 함수를 작성하고

피보나치값을 구해서 출력하는 프로그램 작성하는 과제였다.

사실 구조체를 이용하여 구하고 싶었는데 구조체에 대한 공부가 부족하고 제출기한이 다가와서 if를 사용했다 ㅠㅠ

#include<stdio.h>

void fib(int n, int a, int b, int t);
void main()
{
int n,a=1,b=0,t=0;

printf("피보나치수열의 알고싶은 항을 입력하세용! \n");
printf("n번째 항과 n-1번째 항이 순서대로 출력됩니다^3^ \n");
scanf("%d",&n);

fib(n,a,b,t);

return;
}

void fib(int n, int a, int b, int t)
{
 if(n==1) {
  printf("(%d,%d)\n",a,b);
  return;}
 if(n<0) {
  a=0;
  printf("(%d,%d)\n",a,b);
  return;}
 t=a;
 a=a+b;
 b=t;

 fib(n-1,a,b,t);
 return;
}