R-funksjonen

Her kan brukere av forum utfordre hverandre med morsomme oppgaver og nøtter man ønsker å dele med andre. Dette er altså ikke et sted for desperate skrik om hjelp, de kan man poste i de andre forumene, men et sted for problemløsing på tvers av trinn og fag.

Moderators: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

Post Reply
Aleks855
Rasch
Rasch
Posts: 6874
Joined: 19/03-2011 15:19
Location: Trondheim
Contact:

I forbindelse med et jobbintervju som gikk bra, ble jeg kalt inn på en teknisk test i dag, der jeg fikk 2 timer på å løse en del programmeringsoppgaver.

Den ene oppgaven lød:
En funksjon $R(n)$ er definert slik at $R(n) = R(n-R(n-1)) + R(n-R(n-2))$

$R(1) = 1, R(2) = 1$

Implementer funksjonen og regn ut $R(77)$.
Jeg måtte gjøre det i Java, men for all del, bruk hva du vil.
Image
Gustav
Tyrann
Tyrann
Posts: 4563
Joined: 12/12-2008 12:44

Vanlig rekursjon er altfor tregt, så bruker memoisering og Python :

Code: Select all

function_values = {}
#Velger startbetingelser R(0)=R(1)=1

function_values[0] = 1
function_values[1] = 1

def R(n):
	
	if not n in function_values:
		function_values[n] = R(n-R(n-1))+R(n-R(n-2))
	return function_values[n]
	
print R(77)

#40
Hvordan gjorde du det?
Aleks855
Rasch
Rasch
Posts: 6874
Joined: 19/03-2011 15:19
Location: Trondheim
Contact:

Ser jeg glemte å nevne at startbetingelsene er $R(1) = 1, R(2) = 1$. Siden du starta indekseringa på 0 så tror jeg du fant R(76).

Jeg tenkte i samme baner som deg. Jeg prøvde først med vanlig rekursjon, men den viste ingen tegn på å bli ferdig (som sannsynligvis var hele poenget), så jeg lagra ei liste over resultatene, der liste-indeksen svarer til indeksen i følgen. Svaret var ganske åpenbart da den printa det ^^
Image
Gustav
Tyrann
Tyrann
Posts: 4563
Joined: 12/12-2008 12:44

Aleks855 wrote:Ser jeg glemte å nevne at startbetingelsene er $R(1) = 1, R(2) = 1$. Siden du starta indekseringa på 0 så tror jeg du fant R(76).

Jeg tenkte i samme baner som deg. Jeg prøvde først med vanlig rekursjon, men den viste ingen tegn på å bli ferdig (som sannsynligvis var hele poenget), så jeg lagra ei liste over resultatene, der liste-indeksen svarer til indeksen i følgen. Svaret var ganske åpenbart da den printa det ^^
Ok, med de nye startbetingelsene blir svaret mitt 42. Eneste forskjellen i løsningene er at jeg har brukt en dictionary istedenfor liste.

En veldig enkel oppgave dersom man har drevet litt med project euler:)

Fikk du noen andre artige oppgaver?
Aleks855
Rasch
Rasch
Posts: 6874
Joined: 19/03-2011 15:19
Location: Trondheim
Contact:

42 stemmer ja :)

De andre oppgavene var mer programmeringstekniske. Under "easy" var FizzBuzz-problemet, som jeg vil si er helt trivielt for de aller fleste. Resten var kun myntet på objektorientert programmering og database-spørringer.
Image
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

Just for fun, matlab. Klarer ikke hente ut listeverdiene men får rett svar. Og det er kanskje det viktigste? :p

Code: Select all

function [ n ] = R( n )

if exist('functionList','var')==0
    global functionList;
    functionList(1:2,1)=1;
end

if n <= length(functionList)
    n = functionList(n);
else
    n = R(n-R(n-1)) + R(n-R(n-2));
    functionList(end+1,1) = n; 
end
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
Post Reply