Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Cum sterg mails din Promotions

Vanzare cumparare fara transfer b...

Receptie ciudata, in functie de t...

Dupa 20 ani de facultate, am uita...
 Mobile.de ofera imprumut de bani ...

problema test grila

Digi24 a disparut de pe TV Lg

Drept de proprietate intelectuala...
 Jante noi shitbox

Trinitas TV 4K

Dacia 1316 cu 6 usi ...

Frecventa modificata radio
 Un nou pericol pt batrani

Ar trebui sa vindem imobiliarele ...

Dupa renuntarea la aparat dentar

pelerinaj in Balcik
 

[TEMA] Functia Ackermann

- - - - -
  • Please log in to reply
6 replies to this topic

#1
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014
Ziua buna! M-am apucat sa aprofundez recursivitatea si am dat de Functia Ackermann. Am inteles ca nu e un exemplu foarte bun pentru exemplificarea recursivitatii datorita timpului de lucru si memoriei necesare, dar am vrut sa vad ce si cum, sa imi dau seama mai bine la ce se refera, asa ca am implementat-o.

#include <iostream>
using namespace std;
unsigned m, n;
unsigned long ackermann(unsigned x, unsigned y){
if (m == 0)
	 return y+1;
else if (n == 0)
	 return ackermann(x-1, 1);
else
	 return ackermann(x-1, ackermann(x, y-1));
}
int main(){
cout << "m="; cin >> m;
cout << "n="; cin >> n;
cout << "Ackermann(" << m << "," << n << ")=" << ackermann(m, n);
return 0;
}


Acum, faza e ca daca dau orice valori astfel incat n!=0 si m!=0, primesc "stopped working" imediat dupa introducerea celei de-a doua valori.

IDE folosit: Code::Blocks 13.12
Compilator: MinGW

Ce fac gresit? Precizez ca si la valori gen 1, 1, programul se opreste.


L.E.: In cazul in care mai era un topic asemanator, imi cer scuze, cand caut in Search stau peste 10 minute sa mi se incarce pagina.

Edited by GlontzZz, 23 May 2015 - 12:17.


#2
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostGlontzZz, on 23 mai 2015 - 12:16, said:

Ce fac gresit?
Primul cel mai important lucru pe care-l faci gresit e ca nu pornesti procesul intr-un debugger, ca sa vezi ce se intampla de fapt.

Daca ai face asta, tehnica ti-ar spune ce si unde faci gresit. Invata sa folosesti tehnica in avantajul tau, ca d-aia e tehnica.

Ia sa vedem:

[ https://i.imgur.com/AI4G6e4.png - Pentru incarcare in pagina (embed) Click aici ]

interesanta valoare are y. Fiind o functie recursiva, suspectam ca e ceva in neregula cu conditia de intoarcere din adancurile recursivitatii.

Ia sa vedem si backtrace-ul (comanda bt), ca sa ne confirmam ipoteza:

[ https://i.imgur.com/6AyqMDT.png - Pentru incarcare in pagina (embed) Click aici ]

Ipoteza confirmata.

#3
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,239
  • Înscris: 24.02.2007
Daca functia primeste x si y, de ce folosesti m si n?

#4
GlontzZz

GlontzZz

    Active Member

  • Grup: Members
  • Posts: 1,288
  • Înscris: 08.02.2014
@dani.user, nu mi-am dat seama de asta... Mda, n-am vazut ca am pus variabilele invers... Totusi, cand introduc valori mai mari de (4, 4) se intampla acelasi lucru ca inainte, "stopped working"...

@OriginalCopy, unde pot gasi mai multe informatii despre debugging...? Nu m-am folosit de asta pana acum.

OFF-Topic oarecum: Intr-un timp era un topic pe aici cu toate lucrurile ce tin de compilare, link, cum se compileaza manual si restu'... Nu il gasesc acum, se poate un link?    L.E.: Am gasit.

Edited by GlontzZz, 23 May 2015 - 12:37.


#5
KHISHCHNIK

KHISHCHNIK

    Active Member

  • Grup: Members
  • Posts: 1,680
  • Înscris: 02.05.2014
Ce e ala akerman ? Ce ar trebui sa arate practic aceasta functie ? Patratele dintre doua numere sau ce ar trebui sa arate, care e utilizarea ei ?

#6
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostGlontzZz, on 23 mai 2015 - 12:30, said:

Totusi, cand introduc valori mai mari de (4, 4) se intampla acelasi lucru ca inainte, "stopped working"...
E normal: http://rosettacode.o...mann_function#C

View PostKHISHCHNIK, on 23 mai 2015 - 12:42, said:

Ce ar trebui sa arate practic aceasta functie ?
Cat de primitive sunt calculatoarele din ziua de azi.

#7
KHISHCHNIK

KHISHCHNIK

    Active Member

  • Grup: Members
  • Posts: 1,680
  • Înscris: 02.05.2014

View PostOriginalCopy, on 23 mai 2015 - 12:53, said:

E normal: http://rosettacode.o...mann_function#C


Cat de primitive sunt calculatoarele din ziua de azi.
Serios, la ce e bun ?

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate