(C-Sprache) [Rekursiv] Cow's Tale

Link zur Originalfrage: Thema 1004: [Rekursiv] Die Geschichte der Kuh

antworten:

# include<stdio.h>
 
int fun(int n)
{
    if(n<=3) return n;
    else return fun(n-1)+fun(n-3);
}
int main()
{
    int n;
    while(scanf("%d",&n) && n)
        printf("%d\n",fun(n));
 
    return 0;
}

 analysieren:

Es gab eine Kuh, die zu Beginn eines jeden Jahres eine Färse zur Welt brachte. Jede Färse beginnt ab dem vierten Lebensjahr und bringt jeweils zu Beginn jedes Jahres eine Färse zur Welt. Kommt es Ihnen ein bisschen bekannt vor? Das ist richtig, diese Frage ist der Fibonacci-Folge sehr ähnlich, aber das Inkrementgesetz hat sich leicht geändert.
Eine Eingabe, eine Ausgabe, mehrere Testfallsätze, Eingabe 0 bis Ende, das ist das erste, was klar ist, also wird eine Schleife verwendet, und die Schleife endet, wenn 0 eingegeben wird.

Lassen Sie uns zunächst die Regeln dieser Frage analysieren.

Hier ist eine einfache Tabelle:

Jahre 1 2 3 4 5 6 7 8 9
Anzahl der Kühe 1 2 3 4 6 9 13 19 28

Haben Sie irgendwelche Hinweise gesehen? Das ist richtig, fn=fn-1+fn-3(n>3). Erinnern Sie sich an die Formel für die Fibonacci-Folge? fn=fn-1+fn-2(n>2). Apropos, jeder muss es getan haben, oder?

Beachten Sie, dass in diesem Thema eindeutig die rekursive Methode verwendet werden muss. Daher sollte jeder versuchen, dies mithilfe der Rekursion zu tun, obwohl auch die Array-Methode verwendet werden kann. . .

Da es sich um eine Rekursion handelt, sind drei Punkte untrennbar miteinander verbunden: Wiederholung finden, Veränderung finden und Grenzen finden.

(1) Duplikate finden: Dies ist der Teil wiederholter Operationen während der Rekursion. Einzelheiten finden Sie in der obigen Formel.

(2) Finden Sie Änderungen: Dies ist die Änderung der Parameter während der Rekursion, die zusammen in der obigen Formel enthalten ist.

(3) Finden Sie die Grenze: Dies ist die Bedingung für rekursives Escape. Hier ist offensichtlich, dass n <= 3 ist, da die obige Formel derzeit nicht anwendbar ist.

Als stückweise Funktion geschrieben lautet die Form:

                                                    n ,n<=3

                                        f(n)= (Ich kann keine geschweiften Klammern setzen, das wird jeder sehen)

                                                    f(n-1)+f(n-3),n>3

Vorsichtsmaßnahmen:

(1) Beachten Sie, dass es mehrere Gruppen von Testfällen gibt. Finden Sie daher eine Möglichkeit, Eingabe und Ausgabe zu schleifen.

(2) Beachten Sie, dass die Bedingung für das Ende des Programmvorgangs darin besteht, zu enden, wenn 0 eingegeben wird.

(3) Beachten Sie, dass die Escape-Bedingung der rekursiven Methode n<=3 ist;

Referenzcode:

# include<stdio.h>
 
int fun(int n)
{
    if(n<=3) return n;
    else return fun(n-1)+fun(n-3);
}
int main()
{
    int n;
    while(scanf("%d",&n) && n)
        printf("%d\n",fun(n));
 
    return 0;
}

Diese Frage stammt vom C Language Network: 1004

Die Idee zur Lösung des Problems wird vom Autor Yanhuochenxiao vom C Language Network  reproduziert .

Supongo que te gusta

Origin blog.csdn.net/a871923942/article/details/130659927
Recomendado
Clasificación