Автор Тема: Рекурсия в Scheme  (Прочетена 1357 пъти)

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Рекурсия в Scheme
« -: Nov 05, 2010, 10:32 »
Имаме следното:
Код
GeSHi (Scheme):
  1.  


Това трябва да пресмята сумата на целите числа от а до b. Гледаме 2-рия ред. Как го чета аз: Ако a > b (ако тука греша някой да ме поправи). И ако това е изпълнено следва израза да се оцени на 0. Ако не е изпълнено се изпълнява кода който е за else. Добре де, защо трябва a > b?
1 + 2 + 3 + 4 + 5 = 5 + 4 + 3 + 2 + 1...
Не разбирам за какво искаме a да е по-малко от b?
« Последна редакция: Nov 05, 2010, 14:10 от backtolife »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: Процедури като параметри в Scheme
« Отговор #1 -: Nov 05, 2010, 10:46 »
Ми щото явно така е зададено условието  ;D Иначе, може дъното на рекурсията да ти е когато двете числа са равни (оценява се като стойността им) и в else-клаузата да има пак if и според това кое е по-голямото да правиш рекурсивното извикване. Мързи ме да обяснявам днеска  ;D ;D ;D, схвана ли :)

ПС. Ааа, задачата сигурно е да се сумират всички цели числа в интервала [a,b] (a, b - цели), та затова a трябва да е по-малко (или равно според мен) от b.
Активен

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Re: Процедури като параметри в Scheme
« Отговор #2 -: Nov 05, 2010, 11:28 »
Ми щото явно така е зададено условието  ;D Иначе, може дъното на рекурсията да ти е когато двете числа са равни (оценява се като стойността им) и в else-клаузата да има пак if и според това кое е по-голямото да правиш рекурсивното извикване. Мързи ме да обяснявам днеска  ;D ;D ;D, схвана ли :)

ПС. Ааа, задачата сигурно е да се сумират всички цели числа в интервала [a,b] (a, b - цели), та затова a трябва да е по-малко (или равно според мен) от b.

Пълни глупости. Идеята е че всяка рекурсия трябва да има base case, когато приключва. В случая на всяко извикване 'a' се увеличава с 1, докато не стане по-голямо от 'b', тогава приключва рекурсията.

Код
GeSHi (Scheme):
  1.  

Вече ясно ли е какво става?
« Последна редакция: Nov 05, 2010, 11:34 от lkr »
Активен

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: Процедури като параметри в Scheme
« Отговор #3 -: Nov 05, 2010, 11:31 »
Ти май не разбра въпроса на backtolife - защо решението да не сумира и наобратно.
Иначе той си каза, че кодът му е ясно какво прави.
Активен

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Re: Процедури като параметри в Scheme
« Отговор #4 -: Nov 05, 2010, 11:33 »
Ти май не разбра въпроса на backtolife - защо решението да не сумира и наобратно.
Иначе той си каза, че кодът му е ясно какво прави.

Изобщо не му е ясно какво прави, също така тук няма никакви процедури като параметри. Въпросът доколкото виждам е защо искаме 'а' > 'b', даже е объркал като е написал: Не разбирам за какво искаме a да е по-малко от b? - трябва да е по-голямо, не по-малко
Активен

bop_bop_mara

  • Напреднали
  • *****
  • Публикации: 2433
  • Distribution: Debian Testing
  • Window Manager: LXDE
  • Cute and cuddly
    • Профил
Re: Процедури като параметри в Scheme
« Отговор #5 -: Nov 05, 2010, 11:46 »
Мм
Не разбирам за какво искаме a да е по-малко от b?
според мен това пита :) (и да, пропуснал е, че всъщност a<=b)
Идеята му беше, че можем да сумираме числата от 1 до 5, но можем и да сумираме числата от 5 до 1, защо в кода, който са дали като решение е задължително да вървим от по-малкото до по-голямото, т.е защо да решението да не позволява (sum-int 5 1).
Условието не е изчистено като дефиниция, най-вече защото е някакво примерче. Не знам защо са решили да го озаглавят "процедури като параметри", но тъй като гледам какви са примерите, все за обикновена (пряка) рекурсия става въпрос.

ПС. Иначе, когато изрично сме казали, че не трябва първият аргумент да е по-голям от втория, в този код наистина дъното на рекурскията е при a>b, а не при a=b, защото иначе ще зацикли - (sum-int 5 1) = (+ 5 (sum-int 6 1)) =...
« Последна редакция: Nov 05, 2010, 11:58 от bop_bop_mara »
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Рекурсия в Scheme
« Отговор #6 -: Nov 05, 2010, 14:10 »
За името на темата няма да споря. Просто така беше написана. Марчето знае защо съм я кръстил така и сте прави, че не трябва така да се казва.
Драги ми laker:

Код
GeSHi (Scheme):
  1.  
това кога се изпълнява? Когато 'a' > 'b'? Или и тука ще кажеш че пак не съм разбрал.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Има ли смисъл да се учи Scheme???
Идеи и мнения
b2l 16 2183 Последна публикация Oct 30, 2010, 19:37
от vyrgozunqk