dabei handelt es sich um eine sogen. "Bitverschiebung".
Code: Alles auswählen
n >> 1
So zumindest kenne ich diese Schreibweise.
Man korrigiere mich bitte, falls ich es falsch erklärt habe.
ne0h
Code: Alles auswählen
n >> 1
Code: Alles auswählen
def d2b(n):
return d2b(n / 2) + "01"[n % 2] if n else ""
Code: Alles auswählen
+ "01"[n % 2]
Code: Alles auswählen
"01"[n % 2]
Code: Alles auswählen
if n % 2 == 0:
return '0'
else:
return '1'
Code: Alles auswählen
>>>3 % 2
1
>>>4 % 2
0
>>>"AB"[0]
"A"
>>>"AB"[1]
"B"
Code: Alles auswählen
In [23]: "Spam"[0]
Out[23]: 'S'
In [24]: "Spam"[1]
Out[24]: 'p'
Ja, uhm, Rekursion ist ein nicht ganz triviales Problem, weil es eben doch recht ungewohnt ist.ne0h hat geschrieben:Also diese rekursiven Aufrufe will ich jetzt gleich mal angehen.
Die Beispiele sind in Scheme einer Sprache von der Python viele Konzepte geerbt hat und die ich grad lerne. Ich wollte eben sehen wie so ein Binärkonverter in Scheme aussieht die ich die Sprache auch erst lerne und mich nach Beispielen umsehe, die ich mir zutrauen kann, so ähnlich wie du in Python. Außerdem starten hier manchmal kleine spontane Wettbewerbe, irgendwelche Probleme in allen möglichen Sprachen zu Lösen und sie dann mit der Python-Lösung zu vergleichen.ne0h hat geschrieben:Was genau ist das für eine Sprache, in der Deine verlinkten Beispiele sind? Bzw.: Was hat das Ganze mit den von Dir gerade geschriebenen Beispielen zu tun?
stammt ja von der ertsen Seite. Läuft das denn nun intern per Rekursion oder greift dies auf Bitverschiebungen zurück. Oder besser gefragt:(number->string 21 2)
Also, die Codes die ich teste:ne0h hat geschrieben:Welche Variante ist denn nun effizienter in der Ausführungsgeschwindigkeit? (Nicht dass es wirklich von Bedeutung für mich wäre im Moment, aber es interessiert mich nun doch.).
Code: Alles auswählen
def d2b(n):
d = ""
while n:
d += "01"[n & 1]
n >>= 1
return d[::-1]
print d2b(21)
Code: Alles auswählen
(display (string-append (number->string 21 2) "\n"))
Code: Alles auswählen
$ time eval 'i=0; while [ $i -lt 100 ]; do python2.5 d2.py > /dev/null ; i=$(($i + 1)); done'
real 0m1.301s
user 0m0.944s
sys 0m0.424s
$ time eval 'i=0; while [ $i -lt 100 ]; do mzscheme -r d2.scm > /dev/null ; i=$(($i + 1)); done'
real 0m3.010s
user 0m2.596s
sys 0m0.400s
Code: Alles auswählen
$ time eval 'i=0; while [ $i -lt 100 ]; do python2.5 d2.py > /dev/null ; i=$(($i + 1)); done'
real 0m1.369s
user 0m0.916s
sys 0m0.468s
$ time eval 'i=0; while [ $i -lt 100 ]; do mzscheme -r d2.scm > /dev/null ; i=$(($i + 1)); done'
real 0m3.988s
user 0m3.500s
sys 0m0.504s
$ time eval 'i=0; while [ $i -lt 100 ]; do ./d2 > /dev/null ; i=$(($i + 1)); done'
real 0m0.439s
user 0m0.288s
sys 0m0.276s