Консультация № 178765
31.05.2010, 00:31
0.00 руб.
0 3 1
Написать две функции вычисления i-го числа Фибоначчи - рекурсивную и нерекурсивную - и напечатать таблицу для сравнения времен вычисления i-го числа Фибоначчи для i=4, 6, 8, 10, 12 с помощью этих функций. Используйте для этого стандартную функцию CLOCK- функцию без параметров, которая выдает целое число, равное времени (в миллисекундах) центрального процессора, уже использованного Basic-программой.

Обсуждение

Неизвестный
01.06.2010, 15:11
общий
гаврилова анастасия вячеславовна:
Вам нужен какой язык разработки-то? У Вас упомянут Basic, но это рассылка по С/С++.
Неизвестный
02.06.2010, 19:52
общий
нужно на С++
Неизвестный
04.06.2010, 19:53
общий
это ответ
Здравствуйте, гаврилова анастасия вячеславовна.
Вот Ваша программа. Правда, на таких маленьких числах на моём компьютере время выполнения каждой функции - 0 мс. Если хотите увидеть разницу, продлите выполнение цикла хотя бы до 31, или до 51.
Описание алгоритмов можете посмотреть здесь, функции я взяла оттуда.
Проверено на Visual Studio 2005.
Удачи!

Приложение:
#include <time.h>
#include <iostream>
using namespace std;

//Внимание: функция имеет экспоненциальное время выполнения и неэффективно использует стек.
//Функция возвращает n-e число Фибоначчи по данному n.
int fib_r(int n) //рекурсивная функция
{
if (n <= 2) return 1;
else
{
return fib_r(n - 1) + fib_r(n - 2);
}
}

//возвращает n-е число Фибоначчи
int fib_n(int n) //нерекурсивная функция
{
if (n <= 2) return 1;
//F(n-2)
int x = 1;
//F(n-1)
int y = 1;
//F(n)
int ans = 0;
for (int i = 3; i <= n; i++)
{
ans = x + y;
x = y;
y = ans;
}
return ans;
}

void main()
{
clock_t beg, tm1, tm2; //время
int f;
printf (" i Recursive Non-recursive Value\n");
for (int i=4; i<13; i+=2) {
beg = clock (); //засекаем
f = fib_r (i);
tm1 = clock ()-beg; //вычисляем, сколько прошло
beg = clock ();
fib_n (i);
tm2 = clock ()-beg;
printf ("%4d %5d ms %9d ms %d\n", i, tm1, tm2, f);
}
}
5
Форма ответа