#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;
}
Я исправил ваш код и прокомментировал изменения.