3-C-Sprache – Fünf Schüler sitzen nebeneinander und fragen den fünften Schüler, wie alt er ist.

Problembeschreibung:

        Auf die Frage des fünften Schülers sagte er, er sei zwei Jahre älter als der vierte Schüler. Auf die Frage des vierten Schülers antwortete er, er sei zwei Jahre älter als der dritte Schüler. Dies wiederholte sich, bis der erste Schüler sagte, er sei 10 Jahre alt. F: Wie alt ist der fünfte Schüler?

Ideenanalyse:

  1. Beeilen Sie sich noch nicht mit dem Schreiben von Code. Analysieren Sie zunächst das Problem
  2. Aus der Frage wissen wir nur das Alter des ersten Kindes und der Altersunterschied zwischen jedem benachbarten Kind beträgt 2 Jahre.
  3. In der Hauptfunktion müssen wir eine Funktion schreiben, die schließlich das Alter des n-ten Kindes zurückgibt, das ich benötige, d. h. Alter (n) stellt das Alter des aktuellen Kindes dar.
  4. Verwenden Sie dann die Funktion, um die Regeln aus dem Fragenstamm zu extrahieren.
  5. wir entdecken:
  6. //Alter(5)=Alter(4)+2;
    //Alter(4)=Alter(3)+2;
    //Alter(3)=Alter(2)+2;
    //Alter(2)=Alter(1)+2;
    //Alter(1) = 10;
  7. Das fünfte Kind ist 2 Jahre älter als das vierte Kind, also addieren Sie 2 zum Alter des vierten Kindes. Drücken Sie einfach weiter nach innen, bis das erste Kind sagt, dass ich 10 Jahre alt bin, und beginnen Sie dann nach oben. Zurück, Werte zuweisen Einer nach dem anderen,
  8. Das heißt, es gibt zwei Schlüsselbedingungen für die Rekursion: (1) Die Einschränkungsbedingung zum Beenden der Rekursion. (2) Der bei jeder Rekursion übergebene Wert sollte konstant nahe an der Einschränkungsbedingung liegen.
  9. Die Einschränkungsbedingung für die vollständige Terminalrekursion ist hier n = 1, und der rekursive Übertragungswert, der sich weiterhin n = 1 nähert, ist n-1.

Code wie folgt anzeigen:

#include <stdio.h>
//问题分析:
//问第五个学生,他说比第四个大两岁,问第四个学生,他说比第三个大两岁,一直重复,直到第一个,才说自己多大。
//如果我们写的函数,为计算学生的年龄,每一个传进的n为当前学生的年龄,那么可以写成 
//age(5)=age(4)+1;
//age(4)=age(3)+1;
//age(3)=age(2)+1;
//age(2)=age(1)+1;
//age(1) = 10;
//可以知道,当n大于1时,有一个规律的式子为age(n)=age(n-1)+2;小于等于1的时候,直接age=10;
//此时此刻,已经知道的公式,直接照着写递归即可。
//突然想到,思考方式,我觉得应该先写主函数,然后看我们所需要的函数,是干什么的,如果最后我就需要返回学生的年龄。那么age(n)便表示第n个学生的年龄
//然后再带着这个意义,去思考上述公式,就容易发现规律了。
int age(int n)
{
	if (n <= 1)
		return 10;
	else
		return 2 + age(n - 1);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int age_stu = age(n);
	printf("第%d个学生的年龄为%d\n",n,age_stu);
}

おすすめ

転載: blog.csdn.net/m0_59844149/article/details/131478126