Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
O smecherie pe care nu o inteleg

Balcon parter fara acte

unde gasesc un speed bag in bucur...

Programe TV cu altfel de sporturi
 Laptop "bun la toate" max...

ctfmon.exe - System Error (in Saf...

Ați prins vremurile cand 120 Volț...

Whatsapp nu afișeaza numele ...
 Medii admitere Politehnica Bucure...

Se extinde Baza de la Kogalniceanu

Politist mutilat de caine in curt...

Trotineta- cat rezista?
 Windows 11 si inregistrare de pe ...

Cont Facebook spart

Accesare Plex prin webstation

Reziliere contract Digi Mobil?
 

[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,183
  • Î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 endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

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