Citat:
Ursprungligen postat av fysikmotor
edit: Vi gör om det här, ska gå rakt på sak. Tackar för övrigt dbshw nedan.
Vid formler för talserier så måste man ibland beräkna dem iterativt för att bestämma y(n).
Hur bevisar man att man måste beräkna en formel iterativt? Reserverar dessa bevis även för lösningar som skulle kunna ligga outside the box?
Vet inte om jag har ett bra svar på frågan, jag tror svaret är att det är ganska svårt att göra såna bevis, och det är förvånansvärt ofta det finns lösningar "outside the box". Men jag tror i alla fall att jag tar mig friheten att försöka specificera och formalisera frågeställningen, och jag hoppas att det kan kasta lite ljus över frågan.
Formaliseringen kommer att bygga på begreppet
asymptotisk komplexitet.
Terminologin nedan har jag hittat på själv och skall inte betraktas som standard.
Första observationen är att man måste bestämma vad som är de
primitiva operationerna man kan räkna med. Säg t.ex. att vi definerar funktionen f genom f(0) = 1, f(n) = 2*f(n-1), och frågar oss, kan vi beräkna f icke-iterativt? Svaret är förstås ja om vi "har en knapp på miniräknaren för 'upphöjt till'", ty då är bara f(n) = 2^n. Men om vi bara har en sketen miniräknare med de fyra räknesättet, så misstänker jag att svaret är "nej", och vi måste rekursera på nåt sätt (men notera att (övning för läsaren

) inte ens här är inte den "uppenbara" iterativa lösningen den snabbaste). Så svaret beror alltså på "vilka knappar vi har på miniräknaren", låt oss kalla operationer vi kan göra på vår miniräknare för
primitiva operationer, och säga att vi kan utföra sådana operationer inom konstant tid.
Vad som "borde" vara primitiva operationer varierar nog från fall till fall, och det kan man säkert tvista om, men om man enas om vilka operationer så är primitiva, så tror jag följande definition fångar (åtminstone en aspekt) av det du vill få fram:
Säg att en funktion f(n) är
icke-rekursivt beräkningsbar om det existerar en algoritm (en
Turing-maskin om man så vill) som, givet att den får tillgång till "en miniräknare" som räknar ut de primitiva operationerna inom konstant tid, kan beräkna f(n) i konstant tid (det vill säga att tiden det tar är begränsad av en konstant oberoende av n, eller med andra ord, tiden det tar är O(1) (se
ordo), när n går mot oändligheten).
Din fråga skulle då vara: hur bevisar man att en funktion inte är icke-rekursivt beräkningsbar?
Det här är säkert inte det enda sättet att formalisera frågan, men det är ett sätt, och jag hoppas att det är nåt man i alla fall kan bygga vidare på.
Till själva frågan då, spontant så tror jag att många rekursiva funktioner har "outside the box"-lösningar som är avsevärt snabbare än naiva rekursionslösningar. Och jag tror att det i allmänhet är ganska svårt att bevisa att snabba algoritmer
inte existerar för ett visst problem (t.ex. handlar ju ett av Clay Institutes milleniumproblem om det, nämligen
P=NP?). Men nån som kan sånt här får nog fylla i mer.