C studing NO.20 函数的递归

//错误示范,函数自己调用自己,下面代码运行出现栈溢出。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
//错误示范,函数自己调用自己,下面代码运行出现栈溢出。
int main()
{
printf("hehen");
main();
return 0;
}

//练习1:接受一个整形值(无符号),按照顺序打印它的每一位

//       例如:输入:1234  输出:1  2  3  4

​//1234%10=4

//1234/10=123%10=3

//123/10 =12%10 =2

//12/10  =1%10  =1

//1/10   =0

//

// 递归怎么做?

// print(1234)

// print(123)    4

// print(12)   3 4

// print(1)  2 3 4

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
//练习1:接受一个整形值(无符号),按照顺序打印它的每一位
// 例如:输入:1234 输出:1 2 3 4
//1234%10=4
//1234/10=123%10=3
//123/10 =12%10 =2
//12/10 =1%10 =1
//1/10 =0
//
// 递归怎么做?
// print(1234)
// print(123) 4
// print(12) 3 4
// print(1) 2 3 4
//
//函数进去几层就得返回几层,直到返回第一次跳出函数。
void print(unsigned int n)
{
if (n > 9) //重要思想①
{
print(n / 10); //重要思想②
}
printf("%d ", (n % 10));
}
int main()
{
unsigned int num = 0;
scanf("%u", &num);
print(num);//自定义打印函数
return 0;
}

//写递归代码的时候

// 1、不能死递归,都有跳出条件,每次递归逼近跳出条件。

// 2、递归层次不能太深

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
//写递归代码的时候
// 1、不能死递归,都有跳出条件,每次递归逼近跳出条件。
// 2、递归层次不能太深。
//
void text(int n)
{ //Stack overflow 栈溢出!
if (n < 10000)
{
text(n + 1);
}
}

int main()
{
text(1);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
//--------------------------------------------------
//练习2:编写函数不允许创建临时变量,求字符串长度。
//--------------------------------------------------



//int main()
//{
// char arr[] = "haolebite";
// printf("%d", strlen(arr));//模拟实现一个strlen函数。
// return 0;
//}

//示范:创建了一个自定义函数代替库函数strlen。
// 但是创建了临时变量,不符合题目要求。
//int my_strlen(char* str)
//{
// int num = 0;
// while (*str != '')
// {
// num++;
// str++;
//
// }
// return num;
//}
//int main()
//{
// char arr[] = "haolebite";
// printf("%d", my_strlen(arr));//模拟实现一个strlen函数。
// return 0;
//}

//示范2:老师的正确写法。
int my_strlen(char* str)
{
if (*str != '')

{
printf("%sn", str);
//return 1 + my_strlen(str + 1);
//return 1 + my_strlen(str++);//死循环。
//return 1 + my_strlen(++str);//结果可以,但是改变了str的值。

}
else
return 0;
}
int main()
{
char arr[] = "haolebite";
printf("%d", my_strlen(arr));//模拟实现一个strlen函数。
return 0;
}
//说明
//int main()
//{
// char arr[] = "haolebite";
// char* str = arr;
//
// printf("%sn", str);
// return 0;
//}
发表评论

相关文章