2010-09-03 2 views
1

Я новичок в psuedocode, и у меня возникают проблемы положить все вместе:Просто ПСЕВДОКОД Вопрос

Вот определение функции с именем Foo, входы которых два целых числа и массив целых чисел a[1] ... a[n].

1 Foo(k,m, a[1],...,a[n]) 
2 if (k < 1 or m > n or k > m) return 0 
3 else return a[k] + Foo(k+1,m,a[1],...,a[n]) 

Предположим, что входные целые числа являются k=2 и m=5 и массив содержит вход [5, 6, 2, 3, 4, 8, 2]. Какое значение возвращает Foo? Используя обозначения суммирования, дайте общую формулу для вычисления Foo.

У этого человека болит голова. Вот что я сделал до сих пор:

линия 2 имеет три условных операторов:

  • Если к < 1 // если 2 < 1..this ложна
  • Если т> п // если 5 больше, чем сумма значений в массиве, который является 7, так что это неверно
  • Если к> т // если 2> 5, это неверно

так эта функция будет отображаться строка 3. Строка 3 говорит:

  • возвращение a[k] который a[2], который является вторым значением массива, который 6. Так возьмите 6 и добавить его в (2+1, 5, a[1].....,a[n])

Это то, что я сделал правильно там? Если да, то как я узнаю, что такое a[n]? Должен ли я найти это? Что было бы последним результатом всего этого?

+1

вы задали этот же вопрос пару дней назад http://stackoverflow.com/questions/3595256/simple-pseudocode-code-question. Вам не понравились ваши ответы? – atk

+0

gah, случайное редактирование войны, я пытался откат, чтобы исключить мою ревизию, уценку и предварительный просмотр выглядят правильно, но на этом экране нет.Я останавливаюсь, пока не сломаю его больше. Сожалею. – msw

+0

atk- это не тот же вопрос. – bitmoe

ответ

1

Так возьмите 6 и добавить его в (2 + 1, 5, в [1] ....., в [п])

Take 6 и добавить его в Foo (2 + 1, 5, a [1] ....., a [n]). Это рекурсивная функция. Вы должны снова оценить функцию с k = 3 и m = 5.

+0

Рекурсивный? Так что это не так просто, как взять строку 3 и отобразить результат? Таким образом, 6+ (2 + 1, 5, a [1] ....., a [n]) будет 6+ (3, 5, 5,6,2,3,4,8, 2) , который составляет 6+ (38), что составляет 44? Это правильный ответ? – bitmoe

+0

Foo (2, 5, a) = 6 + Foo (3, 5, a). Foo (3, 5, a) = 2 + Foo (4, 5, a). Foo (4, 5, a) = 3 + Foo (5, 5, a). Foo (5, 5, a) = 4 + Foo (6, 5, a). Foo (6, 5, a) = 0. – dan04

+0

Что? Что там произошло? Как ты это сделал? – bitmoe

2

Простой ответ: эта функция возвращает сумму всех чисел a [k], a [k + 1], ... a [m].

То, что вы делаете, является правильным до сих пор. «N» является просто заполнителем, означающим последний элемент массива. Поэтому, если ваш входной массив равен {5,6,2,3,4,8,2}, n = 7 (у вас есть семь элементов) и a[n] = 2.

Но почему он возвращает сумму всех чисел a [k], a [k + 1], ... a [m], вы должны узнать сами. Просто продолжайте анализ. :)

0

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