Nano Hash - криптовалюты, майнинг, программирование

вычислить число, возведенное в степень из пользовательского ввода, используя scanf,

поэтому я пытаюсь вычислить число, возведенное в степень от пользовательского ввода, используя scanf, но я продолжаю получать ошибку сегментации. Кто-нибудь знает, почему? Это мой код:

int power( int base, int exponent){   
    int total=1;
    int temp = power(base, exponent/2);
    if (exponent == 0)
         return total;  // base case;

    if (exponent % 2 == 0)// if even
         total=  temp * temp;
         return total;
    if(exponent %2 !=0)// if odd
         total =(base * temp * temp);
         return total;
}

void get_info(){
    int base, exponent;
    printf("Enter a base number: ");
    scanf("%d", &base);
    printf("Enter an exponent: ");
    scanf("%d", &exponent);
    //call the power function
    printf("%d",power(base,exponent));

}

int main(){
    //call get_info
    get_info();
    return 0;
}

Любая помощь будет высоко оценена. Спасибо.


  • Visual Studio поделилась этим маленьким самородком: предупреждение C4717: «power»: рекурсивно на всех путях управления, функция вызовет переполнение стека во время выполнения (выделено мной). И это было после того, как я отстегнул ремни безопасности с помощью _CRT_SECURE_NO_WARNINGS. 01.12.2017
  • @wally: я тоже снимаю крышу, отключая проверенные итераторы. 01.12.2017
  • И остерегайтесь этих если. Вы пишете на C, а не на Python: вам нужно заключить два оператора в фигурные скобки. 01.12.2017
  • @Bathsheba Конечно, нам нужна скорость, верно? 01.12.2017

Ответы:


1

Нет ничего, что могло бы заблокировать рекурсию в power:

int power( int base, int exponent){   
    int total=1;
    int temp = power(base, exponent/2); // round and round we go

Решение состоит в том, чтобы поставить

if (exponent == 0)
     return total;  // base case;

в верхней части функции. Библиотеки времени выполнения C++ часто выдают вводящее в заблуждение сообщение о завершении при переполнении стека, подобное этому.

У меня также возникло бы искушение использовать else вместо явного тестирования странного случая. И исправьте вопиющую проблему с некоторыми отсутствующими { и }.

01.12.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..