首页 > 其他分享 >函数与递归

函数与递归

时间:2022-10-03 14:00:09浏览次数:57  
标签:return 函数 递归 int num printf include

​https://stackoverflow.com​​​ 程序员的知乎,可以在上面提问题,回答问题

Github 也是程序员网站     剑指offer 上面有很多程序编程题目

函数递归

什么是递归?

程序调用自身的编程技巧成为递归。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或者间接调用自身的一种该方法,他通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小 的问题来求解,递归策略只需要少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量,递归的主要思考方式在于:把大事化小

递归的两个必要条件:

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

练习

1:

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

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

void print(int x)

{

       if (x > 9)

       {

              print(x/10);

       }

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

}

int main()

{

       int num = 0;

       printf("请输入一个数:\n");

       scanf("%d", &num);

       print(num);

       return 0;

}

函数与递归_#include

2.使用函数不允许创建临时变量,求字符串长度

  • 建立临时变量count的方法。arr是数组,数组在传参的时候,传过去的不是整个数组,而是第一个元素的地址

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

int my_strlength(char* num)

{

       int count = 0;

       while(*num != '\0')//此处是和字符‘\0’作比较,切勿不可写成字符串“\0”。

       {

              count++;

              num++;

       }

       return count;

}

int main()

{

       char arr[] = "hellow bit !";

       int len = my_strlength(arr);

       printf("len=%d\n",len);

       return 0;

}

  • 不建立临时变量,用递归的方法实现

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

int my_strlength(char* num)

{

       

       if (*num != '\0')

       {

              1 + my_strlength(num+1);

              return 1 + my_strlength(num + 1);

       }

       else

          return 0;

}

int main()

{

       char arr[] = "hellow bit !";

       int len = my_strlength(arr);

       printf("len=%d\n",len);

       return 0;

}

3.递归与迭代

迭代类似于循环,在不停的做同一件事 

  • 用递归的方式实现求解n!

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

int mul(int x)

{

       if (x <= 1)

       {

              return 1;

       }

       else

       {

              return x * mul(x - 1);

       }

}

int main()

{

       int n = 0;

       int ret = 0;

       printf("请输入n:\n");

       scanf("%d", &n);

       ret = mul(n);

       printf("%d\n", ret);

       return 0;

}

  • 用递归的方法求费布那切数列  

费布那切数列是第一项和第二项都是1,从第三项开始,后面一项是前两项的和

1,1,2,3,5,8,13,21,35,55……

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

int feb(int n)

{

       if (n <= 2)

       {

              return 1;

       }

       else

       {

              return feb(n-1)+feb(n-2);

       }

}

int main()

{

       int n = 0;

       int ret = 0;

       printf("请输入n:\n");

       scanf("%d", &n);

       ret = feb(n);

       printf("%d\n", ret);

       return 0;

}

使用递归的方法是从后往前推,计算会使计算步骤变得复杂,计算量增多,导致结果出来的很慢

  • 使用迭代(循环)的方式计算  采用从前往后的计算方式,减少了计算量

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

int feb(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;

       int ret = 0;

       printf("请输入n:\n");

       scanf("%d", &n);

       ret = feb(n);

       printf("%d\n", ret);

       return 0;

}






标签:return,函数,递归,int,num,printf,include
From: https://blog.51cto.com/u_15760583/5730211

相关文章

  • 关于 js 函数定义方式
    函数声明式function(a,b){returna+b}特点:此种方式可定义命名的函数变量,而无需给变量赋值,这是一种独立的结构,不能嵌套在非功能模块中。函数名在自身作用域和父作用域内是......
  • 用实例并可视化去理解拉格朗日对偶函数的凹性质
    考虑约束最优化问题:\[\begin{aligned}&min&&f(x)\\&s.t.&&c_i(x)\leq0,i=1,2,...,l,\\&&&h_i(x)=0,i=l+1,l+2,...,n\end{aligned}\]拉格朗日化后为:\[\begin{......
  • 第九篇: go 函数
    命名规范1变量:go语言中变量区分大小写,建议用驼峰 varName="lqz" varname="lqz" fmt.Println(Name) fmt.Println(name)2文件名:建议用下划线3大写字母开头,表......
  • 预测函数
    问题:  函数解决:=FORECAST(2023,FILTER(B$2:B$15,$A$2:$A$15=$A19),{2020,2021,2022})  =Forecast(预测点x值,已知y值集合,已知x值集合)示例中,预测点x值是2023年的年份,已......
  • java学习之:类和对象、语句块、方法、递归结构!
    语句块和方法语句块语句块确定了局部变量的作用域。语句块嵌套,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用语句块外的变量,语句块中定义的变量作用域只限于语句......
  • redux模块拆分——start状态模块化——connect高阶函数模块化——Action函数返回对象
    redux模块拆分使用redux库中提供的​​combineReducers​​方法,可以将多个拆分reducer函数合并成统一的reducer函数,返回一个新reducer,提供给createStore来使用。import{co......
  • 关于对象内函数定义的一种方式——中括号
    我们可以知道在函数内部有关于当key值和value值可以用一种写法来代替,也可以通过对象中括号的方式对属性值得获取,但是呢,如果value是一个函数,那他还有一一种写法:letobj={......
  • Hive 时间相关函数汇总
    Hive时间相关函数汇总文章目录​​Hive时间相关函数汇总​​​​时间转换​​​​**from_unixtime/unix_timestamp**​​​​日期格式相互转换​​​​时间戳转日期格式​......
  • Scala:函数基本概念
    函数//无输入函数def<identifier>=<expression>defhi="hi"//无输入指定返回类型函数def<identifier>:<type>=<expression>defhi:String="hi"//完整函数def......
  • T4 凹函数 整理
    MD凹函数题解题意是多组数据,给定\(n,m\),求定义域和值域分别为\([0,n],[0,m]\)的单调凹函数至多经过几个整点考虑相邻两个经过整点的差,原问题等价于选出k个二维向量\((......