Как указано в ответе @CrisLuengo, вы создали файл функции вместо файла сценария, и они обрабатываются differently
в октаве.Поскольку это функциональный файл, Octave выполняет его, вызывая определяемую им функцию с без аргументов и nargout = 0
.Таким образом, вы получите сообщение об ошибке, что n
не определено.
Другая проблема заключается в том, что имя функции 'recfibo'
не соответствует имени файла функции 'file'
.В таких случаях Octave внутренне меняет имя функции на имя файла функции, поэтому имя меняется на 'file'
.Поэтому Octave и сама функция забудут исходное имя функции, и, к сожалению, функция не может вызывать себя рекурсивно!
Мне нравится ответ @CrisLuengo, но я думаю, что более идиоматичный и предпочтительный способ - всегда с использованием файлов функций вместо файлов сценариев, хотя решение для файла сценариев - это решение only , которое работает в предыдущих версиях Octave (Octave 3.X).
Вы можете изменить свой код на:
function file
disp(recfibo(5))
endfunction
function fibo = recfibo(n)
if ( n < 2 )
fibo = n;
else
fibo = recfibo(n-1) + recfibo(n-2);
endif
endfunction