Silnia za pomocą pętli

Silnia za pomocą pętli
L2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Hej,

To mój pierwszy post na tym forum, więc proszę nie skarćcie mnie :)
Siedzę już trochę czasu i kombinuję, jak stworzyć taką pętlę, żeby nam liczyła silnię, np. silnię z 10, ale nic nie mogę wymyśleć, dlatego zdecydowałem się tu napisać.
Czy moglibyście mi pomóc w tym temacie? Z góry dziękuję za wszelkie posty :)

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6967
0

Liczymy n!.

Przed pętlą inicjujesz zmienną iloczyn = 1.
W pętli for przypisujesz zmiennej iloczyn kolejne mnożenia iloczyn = iloczyn * i, gdzie i należy do przedziału (range) od 1 do n.

zmienna iloczyn zawiera Twój wynik.

SI
  • Rejestracja: dni
  • Ostatnio: dni
0

Jak już to iloczyn = iloczyn + (iloczyn * i), bez tego dostaniesz n a nie żadną silnię.

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6967
0
sig napisał(a):

Jak już to iloczyn = iloczyn + (iloczyn * i), bez tego dostaniesz n a nie żadną silnię.

No co Ty, dobrze napisałem.
Sprawdź jeszcze raz.

L2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
1
Spine napisał(a):

Liczymy n!.

Przed pętlą inicjujesz zmienną iloczyn = 1.
W pętli for przypisujesz zmiennej iloczyn kolejne mnożenia iloczyn = iloczyn * i, gdzie i należy do przedziału (range) od 1 do n.

zmienna iloczyn zawiera Twój wynik.

Dzięki wielkie, działa :D
Z tą różnicą, że jeżeli liczymy silnię np. dla 10, to i musi mieć range od 1 do 11.
To było takie proste, a ja byłem tak bliski rozwiązania i nie mogłem na to wpaść, a robiłem trudniejsze rzeczy <facepalm>

  • Rejestracja: dni
  • Ostatnio: dni
0

Pętle są dla słabych.

Kopiuj
>>> ((lambda f: (f (f))) (lambda f: (lambda x:
...     (1 if x == 0 else x * (f (f) (x - 1)))))) (10)
3628800

>>> 
Haskell
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4700
2
Mózg napisał(a):

Pętle są dla słabych.

Kopiuj
>>> ((lambda f: (f (f))) (lambda f: (lambda x:
...     (1 if x == 0 else x * (f (f) (x - 1)))))) (10)
3628800

>>> 

Sprytnie, ale trochę nieczytelne, na pierwszy rzut oka nie wiadomo co ten kod robi. Czytelniejsze będzie

Kopiuj
factorial = lambda x: 1 if x == 0 else x * factorial(x-1)
print(factorial(10))
Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
1

Jeszcze szybciej będzie tak:

Kopiuj
from math import factorial
print(factorial(10))

ale nie o to chodziło autorowi...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.