Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ 팁&트릭
[44] [STL]generate 알고리듬을 사용한 수열 구하기(2) / adjacent_difference 알고리듬의 활용
김백일.cedar [cedar] 14289 읽음    2003-03-27 17:09
내친 김에, 일반항으로 정의한 수열이 아니고, 귀납적으로 정의된 수열의 경우도 해봅시다.
대표적인 예가 피보나치 수열이지요.

Q2) f(0) = f(1) = 0, f(n + 2) = f(n + 1) + f(n) 로 나타내어지는 피보나치 수열의
12개 항을 출력하고, 각 항의 비 f(n + 1)/f(n)도 출력하여라.

A) 역시 Q1과 거의 동일한 방식으로 작성하면 됩니다.
또한 각 항의 비를 출력하는 것은 adjacent_difference 알고리듬을 사용하면 간단합니다.

//---------------------------------------------------------------------------
#include <iostream>
#pragma hdrstop
#include <iterator>
#include <vector>
#include <algorithm>
#include <numeric>
#include <functional>
//---------------------------------------------------------------------------
using namespace std;

class Fibonacci: public unary_function<double, double>
{
public:
    Fibonacci(double n_0, double n_1):
        n0(n_0), n1(n_1), n(0) {}
    double operator()()
    {
        n = n0 + n1; n0 = n1; n1 = n;
        return n;
    }
private:
    double n0, n1, n;
};

int main()
{
    const int num_terms = 12;
    vector<double> Fibonacci_series(num_terms);
    Fibonacci_series[0] = 1; Fibonacci_series[1] = 1;

    generate(Fibonacci_series.begin() + 2, Fibonacci_series.end(),
            Fibonacci(Fibonacci_series[0], Fibonacci_series[1]));

    ostream_iterator<double> out(cout, " ");
    copy(Fibonacci_series.begin(), Fibonacci_series.end(), out);
    cout << endl;

    adjacent_difference(Fibonacci_series.begin(), Fibonacci_series.end(), out,
                        divides<double>());
    cout << endl;

    return 0;
}
//---------------------------------------------------------------------------

실행 결과는 다음과 같습니다.

1 1 2 3 5 8 13 21 34 55 89 144
1 1 2 1.5 1.66667 1.6 1.625 1.61538 1.61905 1.61765 1.61818 1.61798

참고로, 피보나치 수열의 각 항의 비는 황금비인 (1 + √5) / 2 ≒ 1.618 에 수렴하는 것을 눈으로 볼 수 있지요.

+ -

관련 글 리스트
44 [STL]generate 알고리듬을 사용한 수열 구하기(2) / adjacent_difference 알고리듬의 활용 김백일.cedar 14289 2003/03/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.