ich beschäftige mich Rekursion und wollte den folgen rekursiven Perl Code:
Code: Alles auswählen
#!/usr/bin/perl
use strict;
my @structure;
my @bases;
sub evalRna {
my ($l,
$r)
= @_;
my %bonds = (GU=>1,UG=>1,AU=>2,UA=>2,CG=>3,GC=>3);
my $energy = $bonds{$bases[$l].$bases[$r]};
print "e: ", $energy, "\n";
my $level=0;
my $ii = $l;
for (my $i=$l+1; $i<=$r; $i++) {
$level-- if ($structure[$i] eq ")");
if ($level==0) {
$energy += evalRna($ii,$i) if ($structure[$i] eq ")");
$ii = $i;
}
$level++ if ($structure[$i] eq "(");
}
return $energy;
}
sub evalRnaStructure {
my ($basestring,$structurestring) = @_;
@bases = split(//, 5 . $basestring . 3);
@structure = split(//, "($structurestring)");
return evalRna(0, $#structure);
}
my $basestring = "CUCUCGGUAGCCAAGUUGGUUUUAAGGCGCAAGACUGAAUUUACCACUACGAAACUUGAGAUCGGGCGUUCGACUCGCCCCCGGGAGACCA";
my $parenstring = ".((((((...))(((((((((((..(...))))))(((...).).))(...))))))))))(((((.(..((...)))))).)((...)))";
print evalRnaStructure($basestring,$parenstring),
" hydrogen bonds in this structure.\n";
Code: Alles auswählen
import sys
#sys.setrecursionlimit(333500)
def evalRNA(baseStr, structureStr, l, r):
level = 0
ii = l
energy = 0
bonds = {'GU': 1, 'UG': 1, 'AU': 2,
'UA': 2, 'CG': 3, 'GC': 3}
if bonds.has_key(baseStr[l] + baseStr[r]):
energy = bonds[baseStr[l] + baseStr[r]]
else:
print "error", baseStr[l], baseStr[r]
print l, baseStr[l], baseStr[r], "e ", energy, bonds["GC"]
for i in range(l, r):
if structureStr[i] == ")":
level -= 1
if level == 0:
if structureStr[i] == ")":
energy += evalRNA(baseStr, structureStr, ii, i)
ii=i
if structureStr[i] == "(":
level += 1
#print i
return energy
def evalRnaStructure(baseStr, structStr):
baseStr = '5' + baseStr + '3'
print(baseStr)
print(len(baseStr))
structStr = "(" + structStr + ")"
print structStr
print (len(structStr))
return evalRNA(baseStr, structStr, 1, len(structStr)-1)
if __name__ == "__main__":
baseStr = 'CUCUCGGUAGCCAAGUUGGUUUUAAGGCGCAAGACUGAAUUUACCACUACGAAACUUGAGAUCGGGCGUUCGACUCGCCCCCGGGAGACCA'
structureStr = '.((((((...))(((((((((((..(...))))))(((...).).))(...))))))))))(((((.(..((...)))))).)((...)))'
print(evalRnaStructure(baseStr, structureStr),
" hydrogen bonds in this structure.")
Viele Grüße