Как написать рекурсивную функцию, которая преобразует двоичные числа в десятичную систему? - PullRequest
2 голосов
/ 27 марта 2011

Я пытаюсь написать рекурсивную функцию, которая преобразует двоичные числа в десятичную систему.Я не смог найти ошибку.Любая помощь будет высоко оценена.

Вот моя первая попытка:

#include <iostream>

int sum = 0;
using namespace std;
int powerofO(int taban, int us)
{
    int result = 1;
    for (int i = 1; i <= us; i++)
            result *= taban;
}

int func(int array[], int length, int weight);

int main()
{
    int *size;
    int digits;
    int binary_array[*size];
    cout << "how many digits ? \n";
    cin >> digits;
    *size = digits;
    cout << "Enter your " << digits <<
        " digits binary number using with a space between"
        " each number \n";
    for (int i = 0; i < digits; i++)
            cin >> binary_array[i];
    cout << func(binary_array, digits, -1) << endl;
    return 0;
}

int func(int array[], int length, int weight)
{
    if (length == 0) {
            sum = sum + array[0];
            return sum;
    }
    func(array, length - 1, weight + 1);
    sum = sum + array[length] * powerofO(2, weight);
    return sum;
}

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

int func( int array[],int length ,int weight){
length--;
weight++;
if(length == 0){
sum = sum + array[0] * powerofO(2,weight);
return sum;}   
sum = sum + array[length] * powerofO(2,weight);
func(array,length,weight);}

Ответы [ 2 ]

2 голосов
/ 27 марта 2011

Причина немедленной ошибки сегментации находится очень близко к вершине функции main():

int main()
{
    int *size;
    int digits;
    int binary_array[*size];

int *size объявляет только указатель на int , фактически он не выделяет память для этого int. *size используется немного позже при попытке выделить массив, и все это взрывается.

Итак, небольшая перестановка и программа запускает . Я не думаю, что результаты пока верны :), но я не хочу лишать вас всех возможностей для обучения.

#include <iostream>

int sum = 0;
using namespace std;
int powerofO(int taban, int us)
{
    int result = 1;
    for (int i = 1; i <= us; i++)
            result *= taban;
}

int func(int array[], int length, int weight);

int main()
{
    int digits;
    cout << "how many digits ? \n";
    cin >> digits;
    int binary_array[digits];
    cout << "Enter your " << digits <<
        " digits binary number using with a space between"
        " each number \n";
    for (int i = 0; i < digits; i++)
            cin >> binary_array[i];
    cout << func(binary_array, digits, -1) << endl;
    return 0;
}

int func(int array[], int length, int weight)
{
    if (length == 0) {
            sum = sum + array[0];
            return sum;
    }
    func(array, length - 1, weight + 1);
    sum = sum + array[length] * powerofO(2, weight);
    return sum;
}
0 голосов
/ 27 марта 2011

В func () вы снова вызываете func (), прежде чем делать сумму.Итак, когда длина, наконец, достигает 0, сумма содержит только последнюю цифру в массиве [].

...