Programowanie
Benny: Mam pewne zadanko, lecz na początku chce zdefiniować pewną funkcję określoną rekurencyjnie:
| ⎧ | n−1 dla n>100 | |
M(n)= | ⎩ | M(M(n+11)) dla n≤100 |
|
#include<stdio.h>
#include<conio.h>
int funkcja(int n)
{
if(n>100)
printf("M(n)=%d", n−10);
else
printf("M(n)=%d", funkcja(funkcja(n+11)));
}
main()
{
int i;
printf("Podaj liczbę naturalną dla której chcesz otrzymać wartość funkcji");
scanf("%d", funkcja(i));
getch();
}
Co jest nie tak?
19 lip 14:47
pomoc: if(n>100)
printf("M(n)=%d", n−1);
19 lip 14:48
Benny: Błąd mam wyżej i w main mam błąd, lecz nadal coś mi nie działa/
19 lip 14:59
Benny: #include<stdio.h>
#include<conio.h>
int funkcja(int n)
{
if(n>100)
printf("M(n)=%d", n−10);
else
printf("M(n)=%d", funkcja(funkcja(n+11)));
}
main()
{
int i;
printf("Podaj liczbę naturalną dla której chcesz otrzymać wartość funkcji");
scanf("%d", &i);
printf("%d", i);
getch();
}
Mam na razie tak. Wypisuje mi "i", ale jak dopisuje później printf("%d", funkcja(i)); to
wypisuje zły wynik.
19 lip 15:00
Benny: #include<stdio.h>
#include<conio.h>
int funkcja(int n)
{
int war;
if(n>100)
war=n−10;
else
war=funkcja(funkcja(n+11));
return war;
}
main()
{
int i;
printf("Podaj liczbę naturalną dla której chcesz otrzymać wartość funkcji\n");
scanf("%d", &i);
printf("%d", funkcja(i));
getch();
}
Teraz działa. Ktoś zobaczy czy nie ma błędów?
19 lip 15:08
jc: Wygląda poprawnie, choć ja bym napisał tak
int M(int n){
if(n > 100) return n−10;
else return M(M(n+1)):
}
Można też tak:
int M(int n){
return (n > 100) ? (n−10) : M(M(n+1));
}
Być może M jes zupełnie prostą funkcją ... Tylko, czy warto nad tym myśleć?
19 lip 16:57
jc: Oczywiście zamiast n+1, powinno być n+11
19 lip 17:02
Benny: Jest prostą funkcją, bo w poleceniu trzeba było wypisać wartości funkcji dla n∊{1, ..., 101}
Dla tych n−ów wyszła funkcja stała.
#include<stdio.h>
#include<conio.h>
int M(int n)
{
int wartosc;
if(n>100)
wartosc=n−10;
else
wartosc=M(M(n+11));
return wartosc;
}
main()
{
int i=1;
while(i<=101)
{
printf("%d,", M(i));
i++;
}
getch();
}
19 lip 17:05
jc: Ogólnie M(n) = 91 dla n < 101 oraz M(n) = n−10 w przeciwnym wypadku.
19 lip 17:11
Benny: Dokładnie tak, nawet 101 się łapie
19 lip 17:11