Форум программистов, компьютерный форум CyberForum.ru

не могу разобраться с ошибкой - C++

Восстановить пароль Регистрация
 
KorolevaE
2 / 2 / 0
Регистрация: 24.11.2012
Сообщений: 34
22.12.2012, 12:06     не могу разобраться с ошибкой #1
Нарушение прав доступа при записи "0x001a0fc0". не могу понять где ошибка. программа на рекурсию

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int F(int n, int m){
    if ((n*m)%2==1)  return min(n+m, m*n);
    return F((n*m)/2,m)+F(n,(n*m)/2);}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "RUS");
    int m, n;
    printf ("Введите n=");
    scanf ("%d", &n);
    printf ("Введите m=");
    scanf("%d", &m);
    printf ("F=%.2d\n", F(n,m));
    system ("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
22.12.2012, 12:09     не могу разобраться с ошибкой #2
Цитата Сообщение от KorolevaE Посмотреть сообщение
return F((n*m)/2,m)+F(n,(n*m)/2);
Очень подозрительная строчка
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
22.12.2012, 12:10     не могу разобраться с ошибкой #3
Цитата Сообщение от KorolevaE Посмотреть сообщение
Нарушение прав доступа при записи "0x001a0fc0". не могу понять где ошибка. программа на рекурсию
рекурсия зацикливается
попробуй проанализировать при аргументах 2 2
KorolevaE
2 / 2 / 0
Регистрация: 24.11.2012
Сообщений: 34
22.12.2012, 12:23  [ТС]     не могу разобраться с ошибкой #4
при нечетных аргументах все работает, а вот при любых четных ошибка(

Добавлено через 5 минут
сама рекурсия выглядит так:
{min(n+m,m*n), если (n*m) - нечетно,
F(n,m) =
{F(n*m/2,m) + F(n,n*m/2) в остальных случаях
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,061
22.12.2012, 12:24     не могу разобраться с ошибкой #5
Цитата Сообщение от KorolevaE Посмотреть сообщение
при нечетных аргументах все работает, а вот при любых четных ошибка(
так у тебя зацикливание происходит вот стека и не хватает
смотри
C++
1
int F(int n, int m){
F(2,2)
C++
1
 if ((n*m)%2==1)  return min(n+m, m*n);
if ((2*2)%2==1)ложь идем ниже
C++
1
  return F((n*m)/2,m)
return F((2*2)/2,2)
return F(2,2) вернулись к первому зацикливание
C++
1
+F(n,(n*m)/2);}
до сюда даже не дойдет, а если случайно и дойдет
то тоже F(2,2)

Добавлено через 46 секунд
меняй алгоритм
KorolevaE
2 / 2 / 0
Регистрация: 24.11.2012
Сообщений: 34
22.12.2012, 12:32  [ТС]     не могу разобраться с ошибкой #6
Поняла, спасибо огромное!))
Yandex
Объявления
22.12.2012, 12:32     не могу разобраться с ошибкой
Ответ Создать тему
Опции темы

Текущее время: 05:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru