1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
Если имя функции написано справа от знака присваивания - то это в любом случае трактуется компилятором как рекурсия. Для решения данной проблемы можно описать переменную result (которая уже есть в более новых компиляторах), и пользоваться ей, и только в самом конце присвоить ее значение имени функции, НО...
Возникает вопрос: а зачем тебе это? Зачем понадобилось внутри функции получать ее же значение? А если оно еще не вычислено до конца, тогда что?
Для решения данной проблемы можно описать переменную result
А можно пример, если не трудно?
Цитата
Возникает вопрос: а зачем тебе это?
Например, есть рекурсия по нахождению факториала и мне надо вывести промежуточные значения этого факториала, или одно из значений функции понадобилось 2-3 раза (что-то вроде такого примера, из-за чего и возник этот вопрос).
Я так и не понял, зачем тебе внутри функции ее же значение понадобилось несколько раз? Ну, ладно...
var i: integer;
function f(value: integer): integer; var result: integer; begin result := value + 30; { <--- Предварительный результат функции } { ... } i := result; { <--- Запоминаем }
{ ... } result := result * 3; { пришлось еще ДОвычислить } f := result; { <--- окончательный результат } end;
begin writeln('function = ', f(12)); { <--- Печатаем окончательный результат } writeln('i = ', i) { <--- А это - промежуточный } end.
Хотя опять же - я бы так делать не стал: во-первый, глобальные переменные не люблю, а во вторых - не могу представить, КАК это может понадобиться. Пример (конкретный, а не "допустим, нам понадобится") - в студию... Что именно понадобится, для чего надо сохранять значение ЭТОЙ же функции???
Цитата
Например, есть рекурсия по нахождению факториала и мне надо вывести промежуточные значения этого факториала
Я, кажется, уже написал, что если у тебя рекурсия по нахождению факториалов - то она должна их находить, а не печатать. Это не ее задача, понимаешь? А понадобилось печатать - оберни эту функцию еще одной, или напиши новую, тебе же будет проще потом отлаживать...
function f(n:integer):byte; var k:byte; begin k:=0; repeat n:=n div 10; inc(k) until n<=0; f:=k end;
Функция подсчета количества цифр в числе.
Цитата
Я так и не понял, зачем тебе внутри функции ее же значение понадобилось несколько раз
Лучше всего завести переменную (в этой функции-К) и делать с ней все что угодно, а потом это значение присвоить функции, но у меня почему-то всегда появляются такие вопросы: А что если так? А что если... Спасибо за пример и обяснение