C语言程序设计(初识C语言后部分)

看到一句很幽默的话---"没有调不好的代码,只有不够秃的头。"

(不能秃头^~^!)

7).函数的递归

1.什么是递归

·程序调用自身的编程技巧称为递归(recursion)。

·递归作为一种该算法在程序设计语言中广泛应用。

·一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。

·它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。

·递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

递归的主要思考方式在于:把大事化小。

·举一个例子:

接受一个整型值(无符号),按照顺序打印每一位。

例如:输入:1234,输出:1 2 3 4 (把1234真实的拆成每一位打印在屏幕上)

(PS:%d 是打印有符号的整数<会有正负数> %u 是打印无符号的整数

分析如何递归

递归路线(即函数自己调用自己)

2.递归的两个必要条件

·存在限制条件,当满足这个限制条件的时候,递归便不再继续。

·每次递归调用之后越来越接近这个限制条件。

练习题

·编写函数不允许创建临时变量,求字符串的长度

(PS:strlen 可以求字符串长度<不包括\0>)

·首先写一个创建临时变量的方法(临时变量为 count)

cs 复制代码
#include <stdio.h>
//编写函数不允许创建临时变量,求字符串的长度
//就是模拟实现strlen
int my_strlen(char* str)
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;//找下一个字符
	}
	return count;
}
int main()
{
	char arr[] = "abc";//a b c \0
	int len = my_strlen(arr);//传的是首字符的地址
	printf("%d\n", len);
	return 0;
}

·不创建临时变量

递归求解:

my_strlen("abc")--->

1+my_strlen("bc")--->

1+1+my_strlen("c")--->

1+1+1+my_strlen("\0")--->

1+1+1+0

cs 复制代码
#include <stdio.h>
int my_strlen(char* str)
{
	if (*str != '\0')
		return 1 + my_strlen(str+1);
	else
		return 0;
	
}
int main()
{
	char arr[] = "abc";//a b c \0
	int len = my_strlen(arr);//传的是首字符的地址
	printf("%d\n", len);
	return 0;
}
相关推荐
残月只会敲键盘4 分钟前
面相小白的php反序列化漏洞原理剖析
开发语言·php
ac-er88886 分钟前
PHP弱类型安全问题
开发语言·安全·php
ac-er88887 分钟前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
爱吃喵的鲤鱼17 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
DARLING Zero two♡43 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
Gu Gu Study1 小时前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
一颗松鼠1 小时前
JavaScript 闭包是什么?简单到看完就理解!
开发语言·前端·javascript·ecmascript
有梦想的咸鱼_1 小时前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化