Факториалы с циклами for в C ++ - PullRequest
0 голосов
/ 08 мая 2020

Мой вопрос касается факториалов, поскольку я очень запутался с ними. Я понимаю cin и for l oop, также cout и прочее, однако я очень запутался, когда дело доходит до умножения прошлых значений, я имею в виду следующее: например, факториал 5! = 1 * 2 * 3 * 4 * 5, я не понимаю, как код хранит прошлые значения и умножает, например, 1 первое, 1 * 2 = 2 второе, 1 * 2 * 3 = 6 третье и т. Д. . Может кто-нибудь объяснить мне это. Спасибо.

#include<iostream>

using namespace std;

    int main () { 
     int sayi; 
        cout<< "sayi: "; 
        cin>> sayi; 
        // 5! = 5*4*3*2*1 faktoryaller 
        int faktoriyel = 1; 
        for(int i = 1; i <= sayi; i++){
            faktoriyel = faktoriyel * i;
            cout<<faktoriyel<<endl;
        }
        cout<<"Faktoriyel: "<<faktoriyel<<endl;

    int gir; { 
        cout<<"sayi giriniz: "; 
        cin>> gir; 
        int faktoriyel = 1; 
        for(int i = 1; i <= gir; i++) { 
            faktoriyel = faktoriyel * gir; 
            cout<<faktoriyel<<endl;
        } 
         cout<<"Faktoriyel: "<< faktoriyel <<endl; 
        }
        return 0; 
    }

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Давайте развернем то, что происходит в вашем коде:

  • fakt = 1
  • l oop i = 1 | fakt = 1
    • fakt = fakt * i <==> fakt = 1 * 1 <==> fakt = 1
  • l oop i = 2 | fakt = 1
    • fakt = fakt * i <==> fakt = 1 * 2 <==> fakt = 2
  • l oop i = 3 | fakt = 2
    • fakt = fakt * i <==> fakt = 2 * 3 <==> fakt = 6
  • l oop i = 4 | fakt = 6
    • fakt = fakt * i <==> fakt = 3 * 4 <==> fakt = 12
  • l oop i = 5 | fakt = 12
    • fakt = fakt * i <==> fakt = 12 * 5 <==> fakt = 60

программа не сохраняет это должен выполнять множественное умножение, он делает это на ходу.

Вы можете взглянуть на рекурсивный факториал , который может быть немного проще для понимания

0 голосов
/ 08 мая 2020

Если для i установлено значение 5, код в этом l oop будет выполнен 5 раз:

for(int i = 1; i <= gir; i++) { 
    faktoriyel = faktoriyel * gir; 
    cout<<faktoriyel<<endl;
} 

При первом выполнении faktoriyel = faktoriyel * gir;, faktoriyel и i будет 1, поэтому вы можете увидеть строку как:

faktoriyel = 1 * 1;

Итак, faktoriyel остается 1. Во второй раз, когда строка выполняется, вы можете прочитать ее следующим образом, потому что теперь , i равно 2:

faktoriyel = 1 * 2;

Итак, faktoriyel становится 2. Итак, в качестве последнего примера в третьем раунде строка такая же, как: (потому что faktoriyel теперь 2 и i равно 3)

faktoriyel = 2 * 3;

Людей с математическим образованием сбивает с толку то, что = - это оператор присваивания. Это меняет значение слева. Он не утверждает математического равенства. Кроме того, переменные имеют состояния и меняются со временем. Непросто (поначалу) перейти от этой парадигмы к обычной математической парадигме, которую вы видите в формальных доказательствах.

...