函数的奇思妙想世界5(函数递归)

发布于:2022-11-11 ⋅ 阅读:(639) ⋅ 点赞:(0)

🦄7.函数递归

🐣7.1什么是递归(一种算法)?

程序调用自身编程技巧——>大事化小

int main()
{
 printf("hehe\n");
 main();
 return 0;
}

在这里插入图片描述
错误,发生错误的递归。
在这里插入图片描述
Stack overflow:栈溢出
在这里插入图片描述

递=>递推
归=>回归

🌰7.2 例子一

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Print(unsigned int n)//输入1234
{
	/*while (n)
	{
		printf("%d ", n % 10);
		n = n / 10;
	}*///输出4 3 2 1
	if(n>9)
	{
		Print(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	unsigned int num = 0;
	scanf("%u", &num);//%u:无符号整型
	//写一个函数打印num的每一位
	Print(num);
	return 0;
}

在这里插入图片描述

🐣7.3 递归必要条件

  1. 存在限制条件,当满足这个限制条件,递归不再继续
  2. 每次递归调用之后越来越接近限制条件

🌰7.4栗子两

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

//即模拟实现strlen
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int you_strlen(char* str)//数组名是数组首元素的地址
//字符的地址应该放在字符指针中去
{
	int count = 0;
	while (*str != '\0')
		
	{
		count++;
		str++;//字符指针加一,向后跳一个字符
	}
	return count;
}
//整形指针加一,向后跳一个整型。四个字节
int main()
{
	char arr[] = "tuntun";//[t u n t u n \0]
	int len = you_strlen(arr);
	printf(" % d", len);
	return 0;
}

在这里插入图片描述

//因题目不允许使用临时变量count,所以此代码错误

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int you_strlen(char* str)//数组名是数组首元素的地址
//字符的地址应该放在字符指针中去
{
	if (*str != '\0')//str:第一个字符
		return 1 + you_strlen(str + 1);
	else
		return 0;
}
//整形指针加一,向后跳一个整型。四个字节
int main()
{
	char arr[] = "tuntun";//[t u n t u n \0]
	int len = you_strlen(arr);
	printf(" % d", len);
	return 0;
}

str:指针变量,存的是第一个字符的地址
*str:str指向的空间

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到