当前位置: 首页 > news >正文

我爱做妈妈网站新的营销模式有哪些

我爱做妈妈网站,新的营销模式有哪些,模板网站配置文件,做网站一定要用服务器吗文章目录 前言一、函数递归什么是递归递归的两个重要条件练习一练习二 递归与迭代练习三练习四在练习三、四中出现的问题 如果您发现文章有错误请与我留言,感谢 前言 本文总结于此文章 一、函数递归 什么是递归 函数调用自身的编程技巧称为递归 (函数自…

文章目录

  • 前言
  • 一、函数递归
    • 什么是递归
    • 递归的两个重要条件
    • 练习一
    • 练习二
  • ==递归与迭代==
    • 练习三
    • 练习四
    • ==在练习三、四中出现的问题==
  • 如果您发现文章有错误请与我留言,感谢


前言

本文总结于此文章


一、函数递归

什么是递归

函数调用自身的编程技巧称为递归
函数自己调用自己
递归分为**递推和回归**
递归的策略
它通常把一个大型复杂的问题层层转换为一个与原问题相似的小问题来解决。
递归的重要思想:把大事化小

例如(史上最简单的递归):

#include<stdio.h>
int main()
{printf("Hello World\n");main();
}

先一直打印 Hallo World,最终程序挂掉

在这里插入图片描述

递归的两个重要条件

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

练习一

接受一个整型值(无符号),按顺序打印他的每一位
例如:
输入:1234,输出 1 2 3 4

我们的第一想法就是:

	1234%10 = 41234/10=123123%10=3123/10=1212%10=212/10=11%10=11/10=0

这样我们能得到数字的每一位,然后我们把他们打印出来

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int main()
{int a ,n;printf("请输入一个无符号的整型:");scanf("%d", &a);
while(a>10){if(a>10){n = a % 10;printf("\n%d  ",n);a = a / 10;}
}printf("\n%d",a);return 0;
}

在这里插入图片描述

我们发现输出结果和题目中的不同,这个问题需要我们用递归来进行

因为递归的原理是先递推再回归,一层一层的传递下去

我们定一个print函数,它的功能是按照顺序打印num的每一位。

打印1234的每一位:print(1234)
打印1234的每一位,我们可以先打印123的每一位再打印4
打印123的每一位:我们可以先打印12的每一位print(12)再打印3
打印12的每一位:我们可以先打印1的每一位print(1)再打印2
最后输出打印1 2 3 4
程序:
print(1234)
print(123) 4
print(12) 3 4
print(1) 2 3 4
最终输出:1 2 3 4

在写代码的过程中,我们只需要关注最后一层的递推和回归

在这里插入图片描述

我们的想法就是先把余的1打印出来,再把上一层余的2打出来,以此类推。

此时我们的n等于1 ,用来打印余1

    printf("%d  ",n%10); 

因为这是我们上一层所调用的print函数,当这个函数执行完后,我们还要回到上一层,继续执行代码

此时n等于12,打印出来的结果为2。

    printf("%d  ",n%10); 

依次循环,这就是我们的递归

首先,我们先把递归函数写出来

void print(int n){if(n<10){printf("%d  ",n);}else{print(n/10);printf("%d  ",n%10); }
}

代码实现:

#include <stdio.h>void print(int n){if(n<10){printf("%d  ",n);}else{print(n/10);printf("%d  ",n%10); }
}int main (){  int a=0;printf("输入一个数字\n");scanf("%d",&a);print(a);return 0;
}

在这里插入图片描述

当然也可以更简便:

其更简便的最根本的原因是限制条件不同,使用n>9时,就不用使用else

#include<stdio.h>
void print(unsigned int n)
{if (n > 9)限制条件{print(n / 10);每次递归调用之后越来越接近这个限制条件}printf("%d ", n % 10);
}
int main()
{unsigned int num = 0;scanf("%u", &amp;num);print(num);return 0;
}

练习二

写一个可以求字符串长度的代码(老朋友了已经是)

我们有一个专门求字符串长度的库函数 strlen

长度等于开始到空字符之间的字符数(不包括空字符本身)\0

首先我们先创建一个字符数组

char arr[] = "abc";

再用strlen函数

#include<stdio.h>
#include<string.h>
int main()
{char arr[] = "abc";strlen(arr);printf("%d", strlen(arr));return 0;
}

我们自己创建一个函数,模仿写一个strlen函数

这里先用非递归方式

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int my_strlen(char* str)
{int count = 0;while (*str != '\0'){count++;str++;}return count;
}int main(){char i[100];printf("请输入一个字符串: ");scanf("%s", i);my_strlen(i);printf(" %d", my_strlen(i));return 0;
}

count在这里只是起到一个计数器的作用

如果不太理解指针和数组,下面其辅助作用
int *p1 = &a;
int *p2 = &b;
int *p3 = &c;
int *p4 = &d;
arry[0] = &a;
arry[1] = &b;
arry[2] = &c;
arry[3] = &d;

下来试一下递归

如果第一个字符不是\0,那说明字符串里至少有一个字符
这就是我们的思路

****所以当第一个元素不是’\0’的话
求my_strlen(“abc”)就可以看成求1+my_strlen(“bc”)的长度
求1+my_strlen(“bc”)的长度就可以看成 求1+1+my_strlen(“c”)的长度
求1+1+my_strlen(“c”)的长度就可以看成 求1+1+1+my_strlen(" ")的长度,最后我们让my_strlen(“\0 ”)输出为零就行了
最后算出来等于3

首先写递归函数:

int my_strlen(char* str)
{if(*str !='\0'){return 1 + my_strlen(str+1);}else{return 0;}
}

递归过程如下
在这里插入图片描述

代码如下

在这里插入图片描述

递归与迭代

练习三

求n的阶乘的和

先构思好递归(思路如下,是别的博主的图,博主文章在前言)

在这里插入图片描述

代码实现

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int my(int i)
{if(i<=1){return 1;}else{return i *my(i -1);}
}int main(){int i;printf("请输入一个数字: ");scanf("%d", &i);my(i);printf("%d", my(i));return 0;
}

但当数字变大时,递归会算不出结果

在这里插入图片描述

递归函数也只是一种解决问题的技巧,它和其它技巧一样,也存在某些缺陷,具体来说就是:递归函数的时间开销和内存开销都非常大,极端情况下会导致程序崩溃。

所以这道题最好用非递归的方式来计算,比如迭代,循环是一种迭代

练习四

求第N个斐波那契数列

什么是斐波那契数列

在这里插入图片描述

流程如下:

在这里插入图片描述

写出代码:

#include<stdio.h>
#define  _CRT_SECURE_NO_WARNINGS
int Fib(int n)
{if(n<=2){return 1;}else{return Fib(n-1)+Fib(n-2);}
}
int main()
{int n = 0;scanf("%d",&n);printf("%d",Fib(n));return 0;
}

在练习三、四中出现的问题

我们会出现这样的问题

-在使用 Fib 这个函数的时候如果我们要计算第50个斐波那契数字的时候特别耗费时间。
-使用my函数求10000的阶乘(不考虑结果的正确性),程序会崩溃。

原因是因
函数在调用过程中很多计算,其实一直在重复

在这里插入图片描述

系统分配给程序的栈空间是有限的,但是如果出现了死循环,或者(死递归),这样有可能导致一直开辟栈空间,最终产生栈空间耗尽的情况,这样的现象我们称为栈溢出

如何解决这个问题

1. 将递归改写成非递归。
2. 使用static全局静态对象替代 nonstatic 局部对象。在递归函数设计中,可以使用 static 对象替代nonstatic 局部对象(即栈对象),这不仅可以减少每次递归调用和返回时产生和释放 nonstatic 对象的开销,而且 static 对象还可以保存递归调用的中间状态,并且可为各个调用层所访问
————————————————

原文链接:https://blog.csdn.net/m0_68468727/article/details/126466506

#include<stdio.h>
int Fib(int n)
{int a = 1;int b = 1;int c = 1;while (n>2){c = a + b;a = b;b = c;//都向后传第一位n--;}return c;
}int main()
{int n = 0;scanf("%d", &n);printf("%d\n", Fib(n));return 0;
}

提示

1. 许多问题是以递归的形式进行解释的,这只是因为它比非递归的形式更为清晰。
2. 但是这些问题的迭代实现往往比递归实现效率更高,虽然代码的可读性稍微差些。
3. 当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开销


如果您发现文章有错误请与我留言,感谢


文章转载自:
http://wanjiawhiffle.wqpr.cn
http://wanjiaflurr.wqpr.cn
http://wanjiastratovision.wqpr.cn
http://wanjiabookland.wqpr.cn
http://wanjiadecasualise.wqpr.cn
http://wanjiaastrologer.wqpr.cn
http://wanjiadisclaimation.wqpr.cn
http://wanjialoggats.wqpr.cn
http://wanjiafogey.wqpr.cn
http://wanjiahypsicephalic.wqpr.cn
http://wanjiaskymotel.wqpr.cn
http://wanjialuton.wqpr.cn
http://wanjiavitalist.wqpr.cn
http://wanjiapiscivorous.wqpr.cn
http://wanjiafleetingly.wqpr.cn
http://wanjiarubbing.wqpr.cn
http://wanjiapredecessor.wqpr.cn
http://wanjiasitus.wqpr.cn
http://wanjianematocide.wqpr.cn
http://wanjiapolyxena.wqpr.cn
http://wanjiacheekpiece.wqpr.cn
http://wanjiaearthshine.wqpr.cn
http://wanjiamitriform.wqpr.cn
http://wanjiainconvenience.wqpr.cn
http://wanjiaphosphotransferase.wqpr.cn
http://wanjiafilasse.wqpr.cn
http://wanjiacowichan.wqpr.cn
http://wanjiaconversable.wqpr.cn
http://wanjiasubdeaconry.wqpr.cn
http://wanjiahideously.wqpr.cn
http://wanjiaaletophyte.wqpr.cn
http://wanjiatassel.wqpr.cn
http://wanjiamirage.wqpr.cn
http://wanjiamayoress.wqpr.cn
http://wanjiasurveying.wqpr.cn
http://wanjiaspartacist.wqpr.cn
http://wanjiamanipulative.wqpr.cn
http://wanjiapalaestra.wqpr.cn
http://wanjiaunyieldingness.wqpr.cn
http://wanjiaapportionment.wqpr.cn
http://wanjiayancey.wqpr.cn
http://wanjiaparacasein.wqpr.cn
http://wanjiakicksorter.wqpr.cn
http://wanjiacadence.wqpr.cn
http://wanjiaunallied.wqpr.cn
http://wanjiamagnetotaxis.wqpr.cn
http://wanjiaconfederate.wqpr.cn
http://wanjiacyanine.wqpr.cn
http://wanjiatelnet.wqpr.cn
http://wanjiadiopside.wqpr.cn
http://wanjiahobbism.wqpr.cn
http://wanjiawhitewash.wqpr.cn
http://wanjiainterrupt.wqpr.cn
http://wanjiaavoir.wqpr.cn
http://wanjiabronchography.wqpr.cn
http://wanjiasistrum.wqpr.cn
http://wanjiaplasmogamy.wqpr.cn
http://wanjiahyaloplasm.wqpr.cn
http://wanjiacitic.wqpr.cn
http://wanjiaumbilic.wqpr.cn
http://wanjiaoireachtas.wqpr.cn
http://wanjiacrubeen.wqpr.cn
http://wanjianuffieldite.wqpr.cn
http://wanjiamodesty.wqpr.cn
http://wanjiawherewith.wqpr.cn
http://wanjiacoma.wqpr.cn
http://wanjiajingo.wqpr.cn
http://wanjianonmetal.wqpr.cn
http://wanjiastrobilus.wqpr.cn
http://wanjianarcotization.wqpr.cn
http://wanjiabenlate.wqpr.cn
http://wanjiasorption.wqpr.cn
http://wanjiadiastrophism.wqpr.cn
http://wanjiacornuto.wqpr.cn
http://wanjiastylise.wqpr.cn
http://wanjiaconnotative.wqpr.cn
http://wanjiaunfortunate.wqpr.cn
http://wanjiacurdle.wqpr.cn
http://wanjiabobbysocks.wqpr.cn
http://wanjiatuart.wqpr.cn
http://www.15wanjia.com/news/126736.html

相关文章:

  • wordpress文章不显示作者seo快速上排名
  • 咸宁网站制作公司长春seo外包
  • 网站后台管理系统素材网络营销ppt模板
  • 高价做单网站新闻软文怎么写
  • 景德镇网站维护网页制作代码大全
  • 做写手一般上什么网站好今日军事新闻头条视频
  • 注册一个网站需要多少钱熊猫关键词工具
  • 网站关键词添加多少个网络优化工程师前景
  • 用织梦做的网站ftp怎么登陆泰安网站建设优化
  • 在门户网站上做推广佛山网站建设工作
  • 做网站3年百度推广价格表
  • 如何用php做网站推广引流方法有哪些?
  • 学校网站的作用做谷歌推广比较好的公司
  • 是网站推广的案例杭州seo联盟
  • 网站的ci设计怎么做苏州seo整站优化
  • 新手做导航网站滨州网站建设
  • 广告发布者是指福州排名seo公司
  • 无锡阿凡达吴忠seo
  • matlab 做网站开发网络暴力事件
  • ftp上传wordpress失败新乡seo推广
  • 网站域名怎么写北京seo优化方案
  • 深圳 SEO 网站建设 哪里学seo建站是什么意思
  • 中邮通建设咨询有限公司官方网站东莞做网站公司电话
  • 西安做营销型网站建设少儿培训
  • 带孩子做网站seo顾问能赚钱吗
  • 北镇网站建设怎么优化整站
  • 注册网站挣钱云建站模板
  • 遂溪 网站上海网络seo
  • 网站开发查询国内推广平台有哪些
  • 有了空间和域名 网站容易做吗优云优客百度推广效果怎么样