Помощь - Поиск - Пользователи - Календарь
Полная версия: Фибоначчи рекурсия
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
natka
Нужна программа, которая выводит на экран N первых чисел последовательности Фибонначи. Для вычисления нужно использовать рекурсивную функцию.
Программа есть, но она выводит только последнее число, не могу понять как сделать, чтобы она выводила все числа. Может кто подскажет.
Код

var
N:integer;
function fib(n:integer):longint;
begin
   case n of
     0: fib:= 0;
     1,2:fib:= 1
     else
     fib:=fib(n-1)+fib(n-2);
   end;
end;

begin
readln(N);
WriteLn(fib(N));
readln;
end.
Altair
 var
N:integer;
function fib(n:integer):longint;
begin
case n of
0: fib:= 0;
1,2:fib:= 1
else
fib:=fib(n-1)+fib(n-2);
end;
end;

var
i:longint;
begin
readln(N);
for i:=1 to n do WriteLn(fib(i));
readln;
end.
natka
Спасибо,
не зря говорят все гениальное - просто
Стыдно, как я сама не додумалась :-(
Altair
!flowers.gif
заходи на форум еще!
Lapp
natka, интересно узнать - а сколько чисел тебе так удается реально вывести?
Altair
ну я вот только что попробовал 45 вывести... вот они
Цитата
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170


Дальше не стал, долго...итеративный способ надо применять если хочеться больше..
natka
А мне, честно говоря, без разницы, с десяток выведет, преподаватель больше все равно не потребует :-)
Lapp
Цитата(natka @ 11.02.2006 14:22) *

А мне, честно говоря, без разницы, с десяток выведет, преподаватель больше все равно не потребует :-)

фи, какая проза.. dry.gif

Цитата

Дальше не стал, долго...итеративный способ надо применять если хочеться больше..

Угу, точно.
Ну, может еще десяток можно вытянуть - но даже самый мощный комп заткнется довольно скоро.
Может, это и оффтоп, но просто именно фибоначевские числа есть классический пример для демонстрации динамичекого программирования. smile.gif
klem4
Цитата
Дальше не стал, долго...итеративный способ надо применять если хочеться больше..


Начиная с 47 уже и длинную арифметику ;)

uses crt;

procedure Fib(n : LongInt);
var
a,b,c,i : LongInt;
begin
if (n = 1) or (n = 2) then writeln(1)
else begin
a := 1;
b := 1;
c := 0;
i := 2;
repeat
c := a + b;
a := b;
b := c;
inc(i);
until i = n;
writeln©;
end;
end;

var
n,i : LongInt;
begin
clrscr;
//readln(n);
n := 47;
writeln;
for i := 1 to n do Fib(i);
readln;
end.
volvo
Цитата
даже самый мощный комп заткнется довольно скоро.
Я бы сказал, очень скоро - при n = 48 по-моему... Дальше - переполнение LongInt и все, нет веры результатам... Хорошо, если компилировали в {$R+, Q+}... Но я почему-то все чаще вижу именно обратные примеры... Все почему-то работают с {$R-, Q-} blink.gif

Oops... klem4 уже написАл ... smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.