白斑是什么病| 女性血常规都检查什么| 静脉曲张挂什么号| 什么是尿失禁| mrsa医学上是什么意思| 属蛇与什么属相相克| 什么蔬菜补血| dsd是什么意思| 典史是什么官| 上炕是什么意思| 牛仔裤配什么上衣好看| 打脸是什么意思| 一九七七年属什么生肖| 小孩口臭吃什么药效果最好| 一什么瓜地| 熊猫尾巴什么颜色| 喝酒手发抖是什么原因| nb是什么意思| 作是什么意思| 尿道感染有什么现象| 胃酸反酸水吃什么药| 什么是乳胶床垫| 天津卫的卫是什么意思| 脚心疼什么原因| 骨髓捐赠对自己有什么影响没有| 财大气粗是什么意思| 6月份有什么节假日| 政协是什么| 得了艾滋病有什么症状| 水痘通过什么途径传染| 记吃不记打的下一句是什么| 不以为然的意思是什么| 内分泌失调吃什么| opd是什么意思| 血清谷丙转氨酶偏高是什么意思| 梦见别人掉牙齿是什么征兆| 唯我独尊是什么意思| 三道杠是什么牌子| 灼热感是什么样的感觉| fps是什么意思| 西铁城是什么档次的表| 长痘痘去医院挂什么科| 吃了虾不能吃什么| 皮肤痒是什么原因| 驰字五行属什么| 4月10日什么星座| 下过海是什么意思| 燕子进屋来有什么兆头| 蛋白质高是什么原因| 长脸适合什么耳环| 脑血栓前兆是什么症状表现| 寿辰是什么意思| 尖嘴鱼叫什么鱼| 吃什么都是苦的是怎么回事| min代表什么| 奶盖是什么| 什么药是消炎药| 男科什么医院好| 父亲节什么时候| 早上流鼻血是什么原因| 徐长卿是什么药| 为宜是什么意思| 肛门瘙痒涂什么药膏| 复方新诺明片又叫什么| 庶子什么意思| 黄褐斑是什么引起的| 什么食物养肝护肝最好| 女人骨质疏松吃什么最好| 补肺养肺吃什么食物最好| who医学上是什么意思| 应酬是什么意思| 卵巢畸胎瘤是什么病| 浑身没劲是什么原因| 自言自语的近义词是什么| 脑膜炎是什么病严重吗| 巳时属什么生肖| 荷花开是什么季节| 常吐痰是什么原因| 梦特娇属于什么档次| 阴唇肥大有什么影响| 人心叵测是什么意思| 肚脐眼位置疼是什么原因| 心脏彩超能查出什么| eeg是什么意思| 什么的鼻子填词形容词| 反酸水吃什么药| 低血糖和贫血有什么区别| grader是什么意思| 苯磺酸氨氯地平片什么时候吃| 中暑什么意思| 是什么货币符号| 腋下淋巴结肿大挂什么科| 什么能让男人变大变长| 两性是什么意思| 三焦指的是什么| 摩登女郎是什么意思| 烂嘴是什么原因| 花生什么时候收| 欧舒丹属于什么档次| 八月十八号是什么星座| 躯体症状是什么| 卤肉是什么肉| 国树是什么树| 转念是什么意思| 什么是慢性萎缩性胃炎| 灌肠用什么| 维c什么时候吃效果最好| 女人严重口臭挂什么科| 梅菜是什么菜晒干的| 始祖鸟是什么鸟| 坐骨神经痛吃什么药快| 梦见老板是什么意思| 阿迪达斯是什么牌子| 梦见抢银行是什么意思| 反射弧长是什么意思| 脚趾甲变厚是什么原因| 有缘人什么意思| 精子碎片率高吃什么药| 补体c3偏低是什么意思| 不是省油的灯是什么意思| 美的不可方物什么意思| 邮电局是干什么的| 减肥早餐吃什么最好| 廉洁奉公是什么意思| 四点底和什么有关| 肾炎可以吃什么水果| 1931年属什么生肖| 乳腺1类是什么意思| 早上11点是什么时辰| 原配是什么意思| 吃什么可以偷偷流产| 复姓是什么意思| 快乐大本营为什么停播| 看十全十美是什么生肖| 什么时候冬天| ac是胎儿的什么| ab和a型血生的孩子是什么血型| 海蜇长什么样| 经常咬手指甲是什么原因| 神经性皮炎是什么原因引起的| 大力丸是什么| 升米恩斗米仇什么意思| 精子不液化吃什么药| 白细胞偏高是什么意思| 做梦梦到小孩子是什么意思| 吃什么能生精和提高精子质量| 膀胱炎挂什么科| 子宫腺肌症是什么意思| 6月18号是什么星座| 创伤性关节炎有什么症状| 一根葱十分钟什么意思| 烫伤用什么| 疾控中心是做什么的| ena是什么检查项目| 吃什么可以增加抵抗力和免疫力| 脑心通主治什么病| 腰间盘突出吃什么| 女性肾虚是什么原因导致的| 什么是肝硬化| 毛肚是什么东西| 核磁共振是检查什么的| 1907年属什么生肖| 万事大吉是什么意思| 吃红苋菜有什么好处| johnson是什么品牌| 肿瘤吃什么药可以消除| 什么情况下挂疼痛科| 5月10号是什么星座| 什么是脂溢性脱发| 隔夜茶为什么不能喝| 低血压和低血糖有什么区别| 退化是什么意思| 金牛座前面是什么星座| 皮肤起小水泡很痒是什么原因| 211大学什么意思| 蛋白质偏高是什么原因| 近亲结婚生的孩子会得什么病| 番茄红素有什么作用| 喝什么茶养胃| 乞巧节是什么节| 嘴馋是什么意思| 便秘吃什么润肠通便| 长是什么意思| rx是什么意思| 疱疹挂什么科| 睡醒嘴苦是什么原因| 坐骨神经痛什么症状| 九华山求什么最灵验| 甚好是什么意思| 去脚气用什么药最好| 孕妇吃梨有什么好处| 腿弯处的筋痛是什么原因| 指甲油什么牌子好| 插画师是做什么的| 心里空落落的是什么意思| 什么是空腹血糖| 荨麻疹吃什么药最有效| 缺血灶是什么意思| 甘露醇是什么药| 什么日什么里| 破伤风针有什么作用| 腹泻吃什么好| 黄瓜为什么会苦| 红楼梦为什么是四大名著之首| 做tct检查前要注意什么| 婴儿口臭是什么原因引起的| 皮疹是什么原因引起的| 明五行属什么| 百合有什么功效| 贵阳有什么特产| 奶豆腐是什么| 点完痣要注意什么| 五月底是什么星座| 咳嗽吃什么好的快偏方| 多囊肾是什么意思| 菜鸟是什么意思| 炒菜用什么油比较好| 瑶浴spa是什么意思| 硬金是什么意思| 2.26是什么星座| zara是什么品牌| 最近有什么新闻| 有里面没有两横是什么字| 水浒传主要讲了什么| 继发性不孕是什么意思| 督导是什么| 高考考生号是什么| 久坐脚肿是什么原因| 美女的阴暗是什么样的| 我是小姨的什么人| 心衰是什么原因引起的| adivon是什么牌子| 本是同根生相煎何太急是什么意思| 7月是什么生肖| 走私是什么| 电轴左偏是什么原因| 身上长血痣是什么原因引起的| 甲申日是什么意思| 硕的拼音是什么| hpv病毒是什么病毒| rj是什么意思| 什么药治痔疮最快| 清明节的习俗是什么| 什么牌子的充电宝好| 谷丙转氨酶偏高说明什么原因| 88年的龙是什么命| 吃什么最补血而且最快| 郭富城属什么生肖| 木瓜吃了有什么好处| 大咖是什么意思| 吃布洛芬有什么副作用| 一月30号是什么星座| 微量元素检查挂什么科| 怀孕要检查什么项目| suv是什么意思| 两班倒是什么意思| 韧带拉伤吃什么药| 什么是双重人格| 低血糖要吃什么| 发财树是什么树| 铜绿假单胞菌用什么抗生素| 一什么桌子| 女人排卵期有什么反应| 乳房长斑点是什么原因| 百度Пре?и на садржа?

飞机杯有什么用

С Википеди?е, слободне енциклопеди?е
Визуелни облик рекурзи?е познат као Дросте ефекат.
百度 这也就是说,曾经大力推进的去库存任务已经取得明显成效,或将到一个段落,三四线城市继续上涨的动力不足。

Рекурзи?а (лат. recursio, recursion од recurrere: вра?а?е) у математици и информатици означава поступак или функци?у ко?и у сво?о? дефиници?и користе сами себе. Другим речима, уколико неки поступак захтева да делови проблема ко?е ?е раздво?ио од других бива?у независно подвргнути истом том поступку, та? поступак ?е рекурзиван.

Формалне дефиници?е рекурзи?е

[уреди | уреди извор]

У математици и рачунарству, рекурзи?а одре?у?е (гради) класу об?еката или метода (или об?екат из одре?ене класе) дефиниса?ем неколико ?едноставних базних случа?ева или метода (често само ?едан), и дефиниса?ем правила како се сложени?и случа?еви своде на ?едноставни?е.

На пример, следи рекурзивна дефиници?а предака дате особе:

  • Родите?и особе су му преци (базни случа?);
  • Родите?и предака су тако?е преци особе (корак рекурзи?е ).

Згодно ?е сматрати да рекурзивна дефиници?а дефинише об?екте у односу на претходно дефинисане об?екте класе ко?а се дефинише.

Дефиници?е попут ове се често ?ав?а?у у математици. На пример, формална дефиници?а природног бро?а у теори?и скупова ?е: 1 ?е природан бро?, и сваки природан бро? има свог наследника, ко?и ?е тако?е природан бро?.

Следи ?ош ?едан, можда ?едноставни?и начин да се разуме?у рекурзивни процеси:

  1. Да ли имаш реше?е? Ако имаш, ?ави резултат. (Без оваквог услова за прекида?е, рекурзи?а би се вртела бесконачно).
  2. Ако не, по?едностави проблем, реши ?едноставни?и проблем (проблеме), и спо? резултате у реше?е почетног проблема. Затим ?ави резултат.

Ша?ива илустраци?а гласи Како би разумео рекурзи?у, човек прво мора да разуме рекурзи?у. Или можда тачни?е, од Ендруа Плоткина: Ако ве? знаш шта ?е рекурзи?а, запамти одговор. Ако не знаш, на?и некога ко сто?и ближе Дагласу Хофштатеру[1], и пита? ?ега шта ?е рекурзи?а.

Примери математичких об?еката ко?и се често дефинишу рекурзивно су функци?е, скупови, и посебно фрактали.

Рекурзивне дефиници?е у математици

[уреди | уреди извор]

Рекурзивне дефиници?е су присутне у математици. Пример ?е следе?а дефиници?а природних бро?ева:

  • 1 ?е природни бро?
  • Ако ?е n природни бро?, онда ?е то и n+1.

Рекурзи?ом се дефинише и Фибоначи?ев низ:

  • 1. члан низа ?е 0
  • 2. члан низа ?е 1
  • сваки n-ти члан низа (n>2) ?е сума претходна два члана ()

Рекурзивни алгоритми у програмира?у

[уреди | уреди извор]

Битно ?е напоменути да у савременим програмским ?езицима попут C/C++ и ?аве свако рекурзивно реше?е неког проблема има и сво? итеративни еквивалент, т?. алгоритам ко?и исти проблем решава без рекурзи?е. У практичном програмира?у углавном треба избегавати рекурзи?у ?ер таква реше?а у општем случа?у троше више времена од итеративних.[тражи се извор]

Следи пар примера проблема ко?и су решени рекурзи?ом.

Вредност фактори?ела

[уреди | уреди извор]

Фактори?ел ?е математичка функци?а ко?а се у едукативне сврхе често споми?е у контексту рекурзи?е. Фактори?ел природног бро?а n ?е производ ?ега самог и свих природних бро?ева ко?и су ма?и од ?ега:

При овоме важе закони комутативности множе?а над скупом природних бро?ева, те се исто може обав?ати у било ком редоследу. Може се почети од бро?а n па и?и уназад све до бро?а 1. Ево како би то изгледало у програмском ?езику C:

int fakt(int n)
{
	if(n < 2) // Уколико ?е доби?ени бро? ма?и од два,
	{ return 1; } // вратити 1.

	else // У супротном,
	{ return n*fakt(n-1); } // вратити тренутни бро? помножен са
                                 // фактори?елом бро?а за ?едан ма?ег
                                 // од ?ега.
}

У конкретном случа?у уколико би функци?а као аргумент добила бро? 5, рачун би се разви?ао на начин показан испод. Притом ?е рекурзивни позиви функци?а бити обележени заградама, да би се дочарао редослед почетака и завршетака ових функци?а.

fakt(5) = 5 · fakt(4)
        = 5 · (4 · fakt(3))             // (?ер ?е fakt(4) = 4 · fakt(3))
        = 5 · (4 · (3 · fakt(2)))       // (?ер ?е fakt(3) = 3 · fakt(2))
        = 5 · (4 · (3 · (2 · fakt(1)))) // (?ер ?е fakt(2) = 2 · fakt(1))
        = 5 · (4 · (3 · (2 · 1)))       // (?ер ?е fakt(1) = 1)

        = 5 · (4 · (3 · (2 · 1)))       // сада се множе?е ових вредности врши редом
        = 5 · (4 · (3 · 2))             // ко?им се ф-?е завршава?у т?. уназад
        = 5 · (4 · 6)
        = 5 · 24
        = 120

Сума низа ко?и се завршава нулом

[уреди | уреди извор]

Рецимо да ?е дат низ целих бро?ева чи?у укупну суму треба одредити. ?едно рекурзивно реше?е ?е да се функци?и да?е сам низ и индекс од кога треба почети или наставити сабира?е, све док се не до?е до кра?а низа. До тада се претходно на?ене вредности акумулира?у на сличан начин као што ?е то горе приказано, напреду?у?и за по ?едан елемент приликом сваког рекурзивног позива. Ево како би ова? алгоритам био реализован у ?ави:

public static int sum(int[] niz, int indeks) {
  if(indeks >= niz.length) {                  // Уколико се дошло до кра?а низа,
    return 0;                                 // рекурзи?а се прекида и вра?а се
  }                                           // нула ко?а представ?а неутрал за
                                              // операци?у сабира?а.

  return niz[indeks] + sum(niz, indeks+1);    // У супротном, вра?а се сума елемента
                                              // ко?и се налази на датом индексу и
                                              // рекурзивног позива ове функци?е ко?и
                                              // треба да израчуна суму свих елемената
                                              // након ?ега
}

При чему се функци?а увек позива са низом као првим аргументом и нулом као почетним индексом низа.

Узевши да ?е дати низ на пример a = {11,12,13,14,15}, ова функци?а би рачун обавила на следе?и начин:

sum(a,0) = a[0] + sum(a,0+1)
         = 11   + (a[1] + sum(a,1+1))
         = 11   + (12   + (a[2] + sum(a,2+1)))
         = 11   + (12   + (13   + (a[3] + sum(a,3+1))))
         = 11   + (12   + (13   + (14   + (a[4] + sum(a,4+1)))))
         = 11   + (12   + (13   + (14   + (15   + 0))))          // нема a[5], вра?а се нула

         = 11   + (12   + (13   + (14   + 15)))
         = 11   + (12   + (13   + 29))
         = 11   + (12   + 42)
         = 11   + 54
         = 65

Ова? проблем има и друго реше?е. Аритметика показивача у ?езику C омогу?ава мало другачи?и приступ. Наиме, функци?а овде не мора да прима и низ, и индекс елемента да би приступила елементу. Дово?но ?о? ?е само дати показивач на тражени елемент. Како се овде увек тражи следе?и елемент, показивач на ?ега ?е лако добити из показивача на тренутни. Да би се имплементаци?а по?едноставила, узе?емо додатни услов да се низ завршава са нулом.

int asum(const int* p)
{
	if(*p == 0) // Уколико ?е тренутно обра?ивани бро? нула,
	{ return 0; } // рекурзи?а се прекида. Претходном резултату
                                    // ?е бити додата вра?ена нула.

	else // У супротном, 
	{ return *p + asum(p+1); } // се исти бро? сабира са следе?им и као такав
                                    // вра?а претходним сабирцима.
}

Понаша?е ове функци?е ?е идентично понаша?у горенаведене, с том разликом што задати низ треба да буде a = {11,12,13,14,15,0}. Аргуменат при првом позиву функци?е ?е увек име низа, нпр. позив за низ a би био asum(a).

Неопходност нуле на кра?у низа се може избе?и дава?ем дужине низа функци?и.

Верижни разломци

[уреди | уреди извор]

?едан од верижних разломака, ко?и се везу?е за вредност бро?а пи.

У овом изразу се разломци нижу ?едан испод другог, при чему се сваки уг?еж?у?е у делиоцу претходног. Притом се могу издво?ити два низа сабирка и де?еника ко?и припада?у сваком од ?их. Они би гласили овако:

Сабирци: 1, 3, 5, 7, 9, 11, 13, ... = 2n - 1, n = 1, ...
Де?еници: 1, 4, 9, 16, 25, 36, ... = n2, n = 1, ...

У оба низа се уочава?у правила: први ?е низ непарних бро?ева, а други низ квадратна функци?а природних бро?ева. Први начин представ?а?а овог низа би дакле био формира?е ових разломака по ?иховим редним бро?евима, из ко?их вредности посматраних елемената следе. Оно што ?е битно приметити ?е да се рекурзи?а не може ширити у бесконачност т?. треба ?е негде прекинути. С обзиром да са порастом редног бро?а разломка и бро?еви расту, и то на начин ко?и ума?у?е утица? сваког следе?ег разломка на целокупни резултат, рекурзи?а се може прекинути након одре?еног редног бро?а разломака. Пошто се ?едан разломак, као и сви ?егови следбеници, мора избацити, оста?е да се послед?и зак?учи само са непарним бро?ем, а остатак разломака приближно изрази нулом. Ово би на датом примеру изгледало овако:

Имплементаци?а овог реше?а у програмском ?езику C би изгледала овако:

double f1(int n) // Функци?а доби?а редни бро? разломка
{
	if(n > 200) // Ако ?е редни бро? ве?и од 200,
	{ return 2*n-1; } // рекурзи?а се прекида вра?а?ем само 
                                     // одговара?у?ег непарног бро?а.

	else // У супротном
	{
		return // се вра?а збир
		 (2*n-1) // одговара?у?ег непарног бро?а,
		 + n*n / f1(n+1); // и квадрата редног бро?а разломка,
	} // поде?еног са следе?им разломком.
}

Ову функци?у треба увек позивати са аргументом n=1.


Често има више реше?а. Посматра?ем низова се може увидети и следе?а законитост, при исто? расподели на разломке.

Ако су код ?едног разломка сабирак a и де?еник b, код следе?ег ?е то бити a+2 и a+b+2.

Притом редни бро? разломка, ко?и ?е у овом случа?у n=a+1/2, не мора бити ?едини критери?ум за заустав?а?е рекурзи?е. Целобро?ни тип, ко?и ?е и у овом случа?у бити кориштен за обраду вредности a и b има сво?а ограниче?а у опсегу ко?и покрива, тако да би неконтролисани раст ових вредности дао погрешне резултате или изазвао пад програма. С обзиром да вредност b расте много брже од вредности a, дово?но ?е прекинути рекурзи?у када до?е до неке вредности за ко?у ?е сигурно да ?е достижна пре постиза?а недозво?ених вредности. Како и ни?е потребно превише разломака да би се ва?ани резултат сместио у дабл, тип реалних бро?ева, ова граница сме бити прилично ниско.

?една од могу?их имплементаци?а би била:

double f(int a, int b)
{
	if(b > 1000) // Уколико промен?ива ''b'' премаши унапред
                                        // задату вредност,
	{ return a; } // рекурзи?а се прекида и вра?а се само ''a''.

	else // У супротном, рекурзи?а се настав?а
	{ return a + b/f(a+2,a+b+2); } // и вра?а се следе?и сабирак бесконачног низа,
                                        // ко?и у себи садржи рекурзивни позив
}

Ова функци?а се увек мора позивати са аргументима a=1 и b=1

Референце

[уреди | уреди извор]
  1. ^ Даглас Хофштатер ?е амерички академик ко?и ?е написао чувену к?игу Гедел, Ешер, Бах: Вечна златна плетеница.
父亲节该送什么礼物 颐养天年是什么意思 mfr是什么意思 三无产品指的是什么 肾衰竭五期是什么意思
闲鱼卖出的东西钱什么时候到账 黑卡是什么卡 生动是什么意思 腿水肿是什么原因 什么叫有氧运动
九月三日是什么日子 福五行属性是什么 氨气是什么味道 阳痿吃什么药效果好 gfr医学上是什么意思
穿裙子搭配什么鞋子 宝宝屁多是什么原因 胆没了对身体有什么影响 四肢麻木是什么病 端倪是什么意思
什么是三重一大事项hcv9jop6ns8r.cn 古驰是什么牌子hcv8jop9ns0r.cn 由是什么意思hcv9jop7ns4r.cn 抗核抗体谱检测查什么的hcv8jop0ns3r.cn 月经期间吃什么补气血hcv8jop8ns8r.cn
人生赢家什么意思hcv8jop6ns4r.cn 尿白蛋白高是什么原因hcv8jop2ns7r.cn 癃闭是什么意思weuuu.com 兔儿爷是什么意思imcecn.com 许嵩为什么叫vaehcv8jop6ns8r.cn
入肉是什么字hcv9jop0ns3r.cn pussy是什么意思hcv9jop8ns2r.cn 无力感是什么意思youbangsi.com 舌头开裂是什么原因hcv9jop0ns5r.cn 鱿鱼和什么炒好吃hcv7jop6ns3r.cn
夏至未至什么意思hcv9jop2ns4r.cn 舒服的意思是什么hcv9jop7ns3r.cn 什么那是什么吧hcv8jop2ns0r.cn 性激素六项查什么hcv9jop5ns2r.cn 正常尿液是什么味道hcv9jop1ns9r.cn
百度