Преобразование рекурсивной функции в al oop (тернарный оператор) - PullRequest
0 голосов
/ 12 июля 2020

, поэтому у меня есть этот код из экзаменационного вопроса, и мне нужно преобразовать рекурсивную часть с помощью al oop, теперь я пробовал много раз, но l oop будет бесконечным, вот что я сделал:

код с рекурсивным

int f(int n, int m)
{
    int k;
    if (m == 0) return n;
    k = n % m;
    return k==0 ? m : f(m,k);
}

код с l oop


int ff(int n, int m)
{
    int k;
    if (m == 0) return n;
    k = n % m;
    if (k == 0 ) return m;
    else {
        for(int i = 0 ; k != 0; i++ )
        {
            int h;
            h = k % m;
            if( h == 0 ) return k;
        }
    }
    return m;
}

1 Ответ

1 голос
/ 12 июля 2020

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

int f( int n, int m )
{
    if ( m )
    {
        while ( n % m )
        {
            int tmp = m;
            m = n % m;
            n = tmp;
        }
    }

    return m ? m : n;
}
...