题目:
正确答案:
int age(int x)
{
int y;
if(x==1)
y=10;
else y=age(x-1)+2;
return (y);
}
#include
int main()
{
int age(int x);
printf("age=%d\n",age(5));
return 0;
}
这个age函数有没有可能用void定义,不用Int型,不用return?类似下面这样写(下面是错误代码不能运行)
void age(int x)
{
if(x==1)
age=10;
else age=age(x-1)+2;
}
#include
int main()
{
void age(int x);
int x=5;
age;
printf("age=%d\n",age(5));
return 0;
}
有没有人能帮忙讲一下这部分的知识点,看书没太看懂,非常感谢
如果是void的函数,是不能在printf函数中出现的,printf函数只能出现有返回值的函数
下面是我的理解,供参考:
1、使用递归的正确答案的例子:
函数使用x来控制计算次数,当x大于1,则说明再需要往下计算,则可以返回下一个学生年龄age(x-1),再加上当前学生比下一个学生大的2岁;
然后当x等于1,返回10,即第一个学生的年龄为10,然后一步步往上一次调用的函数返回,则可以计算出第5个学生的年龄。
2、如果使用另外的形式来计算,可以这样计算:
可以再给age函数增加一个int指针,用于保存在函数age()中运算出来的年龄结果;
然后在age()函数中,使用一个循环计算第5个学生的年龄,然后结束后,int指针里就保存了计算出来的第五个学生的年龄,修改如下:
#include<stdio.h>
void age(int x,int *fifthAge )
{
while(x<5){ // 计算的次数
*fifthAge+=2; // 比前一个学生大2岁
x+=1; // 计算下一个学生的年龄
//printf("x=%d,*fifthAge=%d\n",x,*fifthAge);
}
}
int main()
{
int x=1; // 第一个学生
int fifthAge=10 ; // 存储第五个学生的年龄的变量,这个值会在计算过程中不断变化,初始从第一个学生的年龄开始计算
age(x, &fifthAge); // x控制计算多少次,传入 fifthAge的地址,用于保存函数的计算结果
printf("age=%d\n",fifthAge);
return 0;
}