鱼C论坛

 找回密码
 立即注册
查看: 1165|回复: 4

[已解决]递归函数

[复制链接]
发表于 2018-8-18 08:02:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面这段程序中的递归函数是怎样执行的?求详解
#include <stdio.h>

void f(int x[], int n)
{
        if (n > 1)
        {
                f(&x[1], n-1);
                printf("%d", x[0]);
        }
        else
                printf("%d", x[0]);
}
int main()
{
        int z[6] = {1, 2, 3, 4, 5, 6};
        f(z, 6);
        printf("\n");
        return 0;
}
最佳答案
2018-8-18 09:41:26
在这里,递归函数的第一个参数你可以看做传入的是数组,或者是一个可变长度的参数;
第一步传入的f(z, 6), 其中z是数组名即相当于f(&z[0], 6);
第二步进入函数6 > 1, 即即进行f(&z[1], 5), 在这里你可以看做此处传入了将原始z数组去掉第一个元素,以z[1]开头的数组;
依次进行到f(&z[1], 1)时, 打印数组的首个元素;

我大致列一下过程,希望你能明白:
第一步传入数组为1, 2, 3, 4, 5, 6;
第二步为2, 3, 4, 5, 6;
第三步为3, 4, 5, 6;
第四步为4, 5, 6;
第五步为5, 6;
第六步为6;
然后倒序打印(即递归)上面数组的首元素:
打印6;
打印5;
打印4;
打印3;
打印2;
打印1;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-18 09:41:26 | 显示全部楼层    本楼为最佳答案   
在这里,递归函数的第一个参数你可以看做传入的是数组,或者是一个可变长度的参数;
第一步传入的f(z, 6), 其中z是数组名即相当于f(&z[0], 6);
第二步进入函数6 > 1, 即即进行f(&z[1], 5), 在这里你可以看做此处传入了将原始z数组去掉第一个元素,以z[1]开头的数组;
依次进行到f(&z[1], 1)时, 打印数组的首个元素;

我大致列一下过程,希望你能明白:
第一步传入数组为1, 2, 3, 4, 5, 6;
第二步为2, 3, 4, 5, 6;
第三步为3, 4, 5, 6;
第四步为4, 5, 6;
第五步为5, 6;
第六步为6;
然后倒序打印(即递归)上面数组的首元素:
打印6;
打印5;
打印4;
打印3;
打印2;
打印1;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-18 10:05:50 | 显示全部楼层
音频线 发表于 2018-8-18 09:41
在这里,递归函数的第一个参数你可以看做传入的是数组,或者是一个可变长度的参数;
第一步传入的f(z, 6) ...

在这里你可以看做此处传入了将原始z数组去掉第一个元素,以z[1]开头的数组;
为啥这样呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-18 10:49:20 | 显示全部楼层
初学者不睡觉 发表于 2018-8-18 10:05
在这里你可以看做此处传入了将原始z数组去掉第一个元素,以z[1]开头的数组;
为啥这样呢?

假如这个函数,不递归,即去掉f(&x[1], n-1), 那么显然这个函数的功能就是传入一个数组,然后打印首元素;
即便是加上递归,这个函数的本身功能不会变,就是传入一个数组,对首元素进行打印;
那么f(&x[1], n-1)就是相当于把&x[1]看成了首地址,不就是让1, 2, 3, 4, 5, 6 变成了2, 3, 4, 5, 6;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-18 12:23:52 | 显示全部楼层
音频线 发表于 2018-8-18 10:49
假如这个函数,不递归,即去掉f(&x[1], n-1), 那么显然这个函数的功能就是传入一个数组,然后打印首元素 ...

哦哦哦, 理解了, 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 22:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表