Я написал фрагмент кода в Fortran 2003. Я определил тип, который имеет память для двух последних частей последовательности. Процедура - это рекурсивная функция. Тип может использоваться автономно для получения n-й части последовательности или эффективного размещения в цикле для поиска частей в строке (не обязательно начиная с 1), поскольку у нее есть память предыдущих частей. (компилятор: gfortran 4.8).
Тип определяется в mymod.f90 файле, как
module mymod
implicit none
type seq_t
integer :: saved_i = 0, saved_val_i = 0, saved_val_i_1 = 0
contains
procedure :: getpart => getpart_seq
end type
contains
recursive function getpart_seq(this,i) result(r)
class(seq_t) :: this
integer, intent(in) :: i
integer :: r,r_1,r_2
if (i.eq.1.or.i.eq.2) then
r = 1
elseif(i.eq.this%saved_i) then
r = this%saved_val_i
elseif(i.eq.this%saved_i-1) then
r = this%saved_val_i_1
else
r_1 = this%getpart(i-1)
r_2 = this%getpart(i-2)
r = 2*r_1 + 3*r_2
this%saved_val_i_1 = r_1
end if
this%saved_i = i
this%saved_val_i = r
end function getpart_seq
end module mymod
Основная программа для запрошенной случае
program main
use mymod
implicit none
type (seq_t) :: seq
integer :: i,p,tmp_new,tmp_old,ans
! Set the threshold here
p = 90
! loop over parts of the sequence
i = 0
do
i = i + 1
tmp_new = seq%getpart(i)
print*,tmp_new
if (tmp_new>p) then
ans = tmp_old
exit
end if
tmp_old = tmp_new
end do
print*,"The last part of sequence less then",p," is equal to",ans
end program
Результатом является
1
1
5
13
41
121
The last part of sequence less then 90 is equal to 41.
Как 'len' или 'append' не родной python? – muddyfish
Извините, мне позже нужно было бы ответить взаимностью в fortran, и, к сожалению, fortran не имеет этих функций. –
Тогда зачем вообще писать его на питоне? – muddyfish