牛客 题库 递归

理解递归:牛客题库解析
本文探讨牛客题库中涉及的递归问题,重点在于递归的运用和`print(++s)`的指针移动与函数调用顺序。递归是程序设计中的重要算法,包括直接递归和间接递归。通过一个网上资源提供了进一步的理解。

1.下列代码的输出是?(注:print已经声明过)

链接:https://www.nowcoder.com/questionTerminal/d2d9e5807e9d4b4e995a0216bd873481
来源:牛客网

main(){     
    char str[]="Geneius";
    print (str);
} 
print(char *s){
  if(*s){
       print(++s);
       printf("%c",*s); 
}
}

解答:输出的是" suiene"(注意,字母前面有一个空格)

这里考察了两个知识点:递归和print(++s),指针先移动,然后调用函数。

找到一篇讲解递归的博客:递归算法

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。递归有直接递归

间接递归

直接递归:函数在执行过程中调用本身。
间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。

下面是网上的一个解释:

大家应该都看出这是递归了,但是既然错了那就认认真真一遍一遍写出来,看看是哪里错了:
1、*s为G,执行print(e),printf(e)被压入倒数第1层,应该输出e;
2、*s为e,执行print(n),printf(n)被压入倒数第2层,应该输出n;
3、*s为n,执行print(e),printf (e) 被压入倒数第3层,应该输出e;
4、*s为e,执行print(i),printf (i) 被压入倒数第4层,应该输出i;
5、*s为i,执行print(u),printf (u) 被压入倒数第5层,应该输出u;
6、*s为u,执行print(s),printf (s) 被压入倒数第6层,应该输出s;
7、*s为s,执行print(\0),printf (\0) 被压入倒数第7层,应该输出空格;
8、开始跳出print,从上向下得到压入栈中的printf,得到最后结果“ suiene”

代码及结果如下:
void print(char *s){
	if (*s){
		print(++s);
		printf("%c", *s);
	}
}
int main(){
	char str[] = "Geneius";
	print(str);
}
输出结果: \0suiene


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值