Несколько функций в C ++ - PullRequest
1 голос
/ 23 января 2020

Сегодня я пытался сделать рекурсию с несколькими функциями, и я использовал какую-то функцию, и в этом я использовал функцию, которая объявлена ​​под ней

Вот мой код:

#include<bits/stdc++.h>
using namespace std;
#define MOD 10

int f(int x){
    if(x == 4) return 1;
    return 3*f(((2*x+2)%11)-1);
}


int q(int x){
    if(x == 7) return 1;
    return f(x) + q((3*x)%MOD);
}

int g(int x){
    if(x == 0) return 1;
    return (g(x-1)+f(g(x-1)) + f(x-1) + h(x-1))%MOD;
}

int h(int x){
    if(x == 0) return 1;
    return (2*h(x-1) + g(x-1) + q(f(x-1)%10))%MOD;
}


int main() {

    cout << g(4);

    return 0;
}

Ошибка в том, что в функции g(x) она обращается к h(x), который объявлен ниже, а функция h(x) использует функцию g(x), поэтому не может ничего сделать

Пожалуйста, дайте мне знать что я должен сделать, чтобы сделать эту работу.

Большое спасибо.

Ответы [ 3 ]

4 голосов
/ 23 января 2020

Итак, вы видите проблему, заключающуюся в том, что функция определена после того, как вы ее использовали, поэтому ваш компилятор не может ее увидеть Эта «проблема» решается с помощью объявления функции, а затем ее определения. В вашем случае вы можете объявить все функции выше main, а затем определить (реализовать) после main:

#include <iostream>
using namespace std;
#define MOD 10

// declaration ***
int f(int x);
int q(int x);
int g(int x);
int h(int x);
// **************

// main ***
int main() {

    cout << g(4);

    return 0;
}
// **************

// definition ***
int f(int x){
    if(x == 4) return 1;
    return 3*f(((2*x+2)%11)-1);
}

int q(int x){
    if(x == 7) return 1;
    return f(x) + q((3*x)%MOD);
}

int g(int x){
    if(x == 0) return 1;
    return (g(x-1)+f(g(x-1)) + f(x-1) + h(x-1))%MOD;
}

int h(int x){
    if(x == 0) return 1;
    return (2*h(x-1) + g(x-1) + q(f(x-1)%10))%MOD;
}
// **************

Также не включайте # include bits / stdc ++. H

1 голос
/ 23 января 2020

Вам необходимо добавить предварительное объявление функции h для того, чтобы ваш код компилировался, что-то вроде:

#define MOD 10

int f(int x){
    if(x == 4) return 1;
    return 3*f(((2*x+2)%11)-1);
}

int h(int); // add this line and you will be alright! ;)

int q(int x){
    if(x == 7) return 1;
    return f(x) + q((3*x)%MOD);
}

...

Как правило, вы можете узнать, почему это необходимо здесь .

1 голос
/ 23 января 2020

Сначала объявите свои функции .

#include<bits/stdc++.h>
#define MOD 10

// declaring your functions here makes sure that you can
// use them before they are fully defined.
int f(int x);
int q(int x);
int g(int x);
int h(int x);

// Now here below you can use the functions declared above
// at any place you wish.
int f(int x){
    if(x == 4) return 1;
    return 3*f(((2*x+2)%11)-1);
}


int q(int x){
    if(x == 7) return 1;
    return f(x) + q((3*x)%MOD);
}

int g(int x){
    if(x == 0) return 1;
    return (g(x-1)+f(g(x-1)) + f(x-1) + h(x-1))%MOD;
}

int h(int x){
    if(x == 0) return 1;
    return (2*h(x-1) + g(x-1) + q(f(x-1)%10))%MOD;
}


int main() {

    std::cout << g(4);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...