🦄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 递归必要条件
- 存在限制条件,当满足这个限制条件,递归不再继续
- 每次递归调用之后越来越接近限制条件
🌰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 后查看