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

#c #recursion

#c #рекурсия

Вопрос:

Кажется, я не могу найти никаких ошибок в своей программе. Я все еще новичок в c и не смог понять большинство примеров, которые я нашел в Интернете. Это то, что имеет смысл для меня, но это также моя первая попытка рекурсии. Буду признателен за любую помощь.

 #include "pch.h"
#include <iostream>
#include <cmath>
using namespace std;

int convert(string num, double dec_num, int i)
{
    if (i == num.length())
    {
        return dec_num;
    }
    else
    {
        dec_num  = (pow(2, num.length()) * num[i]);
    }
      i;
    convert(num, dec_num, i);
}

int main()
{
    string binary = "101";
    cout << convert(binary, 0, 0) << endl;
    return 0;
}
  

Он возвращает 14622728, заранее благодарю вас за любую помощь, которую вы могли бы предложить <3

Комментарии:

1. Любая функция, не являющаяся пустой, должна return что-то. Ваше заканчивается convert() вызовом. Что она возвращает в этой ветке?

2. Переход к последней части функций, не являющихся пустыми, без выполнения return инструкции вызывает неопределенное поведение в C . ( N3337 6.6.3 Инструкция return)

3. convert(num, dec_num, i); вероятно, должно быть return convert(num, dec_num, i);

Ответ №1:

 #include "pch.h"
#include <iostream>
#include <cmath>
using namespace std;

int convert(string num, double dec_num, int i)
{
    if (i == num.length())
    {
        return dec_num;
    }
    else
    {
        dec_num  = (pow(2, i) * (num[i]-'0')); //change here 
//        cout<<dec_num<<'n';
    }
      i;
    return convert(num, dec_num, i); //change here 
}

int main()
{
    string binary = "101";
    cout << convert(binary, 0, 0) << endl;
    return 0;
}
  

Я исправил ваш код и прокомментировал изменения.