C语言 函数 基础题 另一种方法

题目:

img

正确答案:

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;
}
 

img