Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
fabrickijalex
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 63
1

Переполнение стека

15.05.2011, 22:33. Просмотров 2563. Ответов 3
Метки нет (Все метки)

почему возникает переполнение стека (при вводе любого больше 1 числа)?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static double rec(double n)
        {
            if (n == 1)
            {
                return 1;
            }
            else
            {
                return rec((n / 2)+1);
            }
        }
        static void Main(string[] args)
        {
 
            double n = Convert.ToDouble(Console.ReadLine());
            double a = rec(n);
            Console.WriteLine(a);
 
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2011, 22:33
Ответы с готовыми решениями:

Переполнение стека
public string XORLP4(string _lpart, string _newextentedbinarytempP4) { int...

Переполнение стека
Привет записался на курсы по C#, там дали задание сделать консольный морской бой То, что смог...

Переполнение стека
string syntax = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "-", "*", "/",...

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

Переполнение стека вызовов
using System; using System.Collections.Generic; namespace Lists { /// <summary> ///...

3
m0nax
1204 / 909 / 109
Регистрация: 12.01.2010
Сообщений: 1,893
Завершенные тесты: 3
15.05.2011, 22:48 2
потому что при таком условии n не будет равно единице
1
Killster
181 / 184 / 17
Регистрация: 26.11.2010
Сообщений: 511
15.05.2011, 22:59 3
Если у нас Rec(2), то мы вызовем рекурсию rec((n / 2)+1) = 2. => stack overflow
1
fabrickijalex
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 63
15.05.2011, 23:16  [ТС] 4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
       
        
        static double rec(double n)
        {
            
            if (n == 1)
            {
                return 1;
            }
            else
            {
                if (Math.Pow(2, n - 1) >= n && n >= Math.Pow(2, n))
                {
                return rec((n/2)+1);
                }
                if (Math.Pow(2, n - 1) <= n && n <= Math.Pow(2, n))
                {
                    return n;
                }
                return 0;
                
                
            }
        }
        
        static void Main(string[] args)
        {
            
            double n = Convert.ToDouble(Console.ReadLine());
            
            double a = rec(n);
            Console.WriteLine(a);
            
            
 
        }
    }
}
Мне дали такое задание: написать алгоритм вычисляющий число а, для которого выполняется неравенство 2^(a-1)<=n<=2^a , где n – натуральное число. Для подсчета числа а использовать формулу: если n =1, а =1. если n>1 тогда a=a(n/2)+1 (вызов метода с параметром (n/2)+1)

помогите исправить этот код, уже третий день бьюсь над этой задачей, ни как....

Добавлено через 4 минуты
Исправил
C#
1
2
3
4
  if (Math.Pow(2, n - 1) >= n && n >= Math.Pow(2, n))
                {
                return rec((n/2)+1);
                }
На
C#
1
2
3
4
 if (Math.Pow(2, n - 1) > n || n > Math.Pow(2, n))
                {
                return rec((n/2)+1);
                }
Метод всегда возвращает 2, я удовлетворён результатом, спасибо всем.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2011, 23:16

Переполнение стека потока
Столкнулся с такой проблемой: Работаю в программе, и видимо когда много действий произвожу, при...

Переполнение стека при рекурсии
имеется рекурсивный метод static double FixedPointIteration(double A, double b, double...

Переполнение стека при рекурсии
Есть такая задача: составить полный список всех папок на сервере. Делаю так static List&lt;string&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru