1.递归算法的定义:

2.递归与迭代的优劣

eg1:斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

  1. /*
  2. 斐波那契数列 迭代实现 (打印出前40个)
  3. */
  4. #include <stdio.h>
  5. int main(){
  6. int i, arr[];
  7. arr[] = ;
  8. arr[] = ;
  9. printf("%d %d ",arr[],arr[]);
  10. for(i=; i<; i++){
  11. arr[i] = arr[i-] + arr[i-];
  12. printf("%d ",arr[i]);
  13. }
  14. printf("\n");
  15.  
  16. return ;
  17.  
  18. }
  1. /*
  2. 斐波那契数列 递归实现 (打印出前40个)
  3. */
  4. #include <stdio.h>
  5. /*
  6. int fb(int n){
  7. if(n == 0){
  8. return 0;
  9. }else if(n == 1){
  10. return 1;
  11. }else{
  12. return fb(n-1) + fb(n-2);
  13. }
  14. }
  15. */
  16.  
  17. int fb(int n){
  18. if(n<){
  19. return n == ? :;
  20. }else{
  21. return fb(n-) + fb (n-);
  22. }
  23.  
  24. }
  25.  
  26. int main(){
  27. int i;
  28. for(i=; i<; i++){
  29. printf("%d ",fb(i));
  30. }
  31. printf("\n");
  32.  
  33. return ;
  34. }

eg2:阶乘:亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

  1. /*
  2. 递归实现阶乘
  3. 递归方式定义:0!=1,n!=(n-1)!×n。
  4. */
  5.  
  6. #include <stdio.h>
  7. int fact(n){
  8. if(n == ){
  9. return ;
  10. }else{
  11. return fact(n-) * n;
  12. }
  13. }
  14.  
  15. int main(){
  16. int n = ;
  17. printf("%d\n",fact(n));
  18. return ;
  19. }

eg3:

  1. #include <stdio.h>
  2. int print(){
  3. char a;
  4. scanf("%c", &a);
  5. if(a != '#'){
  6. print();
  7. }
  8. if(a != '#'){
  9. printf("%c",a);
  10. }
  11. return ;
  12. }
  13. int main(){
  14. print();
  15. printf("\n");
  16. return ;
  17. }

解题思路:

eg4:二分法查找

  1. /*
  2. 二分法查找:迭代实现
  3. */
  4. #include <stdio.h>
  5. int main(){
  6. int arr[] = {,,,,,,,,,};
  7. int input, low, high, mid;
  8. low = ;
  9. high = ;
  10. mid = (low + high) / ;
  11. scanf("%d", &input);
  12.  
  13. while(input != arr[mid]){
  14. if(input < arr[mid]){
  15. high = mid;
  16. mid = (low + high) / ;
  17. }else{
  18. low = mid;
  19. mid = (low + high) / ;
  20. }
  21. }
  22. printf("%d ",mid);/*输出要查找数字在数组中的下标*/
  23. return ;
  24.  
  25. }
  1. /*
  2. 二分法查找:递归实现
  3. */
  4.  
  5. #include <stdio.h>
  6. int fun(int low, int high, int input, int arr[]){
  7. int mid;
  8. mid = (low + high) /;
  9. if(arr[mid] == input){
  10. return mid;
  11. }else{
  12. if(input < arr[mid]){
  13. high = mid;
  14. return fun( low, high, input, arr);
  15. }else{
  16. low = mid;
  17. return fun( low, high, input, arr);
  18. }
  19. }
  20.  
  21. }
  22. int main(){
  23. int arr[] = {,,,,,,,,,};
  24. int input, low, high;
  25. low = ;
  26. high = ;
  27. scanf("%d", &input);
  28. printf("%d \n",fun(low, high, input, arr));/*输出要查找数字在数组中的下标*/
  29. return ;
  30. }

C_关于递归算法的几个例子的更多相关文章

  1. JAVA递归算法及经典递归例子 对于这个汉诺塔问题

    前言:递归(recursion):递归满足2个条件 1)有反复执行的过程(调用自身) 2)有跳出反复执行过程的条件(递归出口) 第一题:汉诺塔 对于这个汉诺塔问题,在写递归时,我们只需要确定两个条件: ...

  2. c 递归函数浅析

    所谓递归,简而言之就是应用程序自身调用自身,以实现层次数据结构的查询和访问. 递归的使用可以使代码更简洁清晰,可读性更好(对于初学者到不见得),但由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很 ...

  3. 归并排序python实现

    归并排序python实现 归并排序 归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法 首先是一个例子 原序先通过一半一半的拆分,然后: 然后再一步一步的向上合并,在合并的过 ...

  4. Master定理学习笔记

    前言 \(Master\)定理,又称主定理,用于程序的时间复杂度计算,核心思想是分治,近几年\(Noip\)常考时间复杂度的题目,都需要主定理进行运算. 前置 我们常见的程序时间复杂度有: \(O(n ...

  5. 如何计算一个字符串表示的计算式的值?——C_递归算法实现

    在<C程序设计伴侣>的8.7.3 向main()函数传递数据这一小节中,我们介绍了如何通过main()函数的参数,向程序传递两个数据并计算其和值的简单加法计算器add.exe.这个程序,好 ...

  6. 第二篇、C_递归算法

    简介: 在实际应用当中,我们常常会接触到一些递归的数法. 递归算法的特点 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简 ...

  7. Kernel Methods (1) 从简单的例子开始

    一个简单的分类问题, 如图左半部分所示. 很明显, 我们需要一个决策边界为椭圆形的非线性分类器. 我们可以利用原来的特征构造新的特征: \((x_1, x_2) \to (x_1^2, \sqrt 2 ...

  8. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

  9. (转)递归算法的时间复杂度终结篇与Master method

    开篇前言:为什么写这篇文章?笔者目前在学习各种各样的算法,在这个过程中,频繁地碰到到递归思想和分治思想,惊讶于这两种的思想的伟大与奇妙的同时,经常要面对的一个问题就是,对于一个给定的递归算法或者用分治 ...

随机推荐

  1. [转] node升级到8.0.0在vscode启动js执行文件报错

    由于升级node 到 8.0.0 版本 vscode 启动一直报错: `node --debug` and `node --debug-brk` are invalid. Please use `no ...

  2. Codeforces 1137D Cooperative Game (看题解)

    Cooperative Game 智商题, 感觉不太能推出来, 虽然看看证明过程是对的. #include<bits/stdc++.h> #define LL long long #def ...

  3. jenkins(2): jenkins定时构建项目

    参考:http://blog.sina.com.cn/s/blog_b5fe6b270102v7xo.html https://blog.csdn.net/xueyingqi/article/deta ...

  4. P1182 数列分段`Section II` P1316 丢瓶盖 二分答案

    题目描述 对于给定的一个长度为N的正整数数列A-iA−i,现要将其分成M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 142451要分成 ...

  5. Python交互图表可视化Bokeh:4. 折线图| 面积图

    折线图与面积图 ① 单线图.多线图② 面积图.堆叠面积图 1. 折线图--单线图 import numpy as np import pandas as pd import matplotlib.py ...

  6. jsp的c标签使用

    http://blog.csdn.net/chabale/article/details/9406437

  7. win10安装Oracle11g,出现INS-13001环境不满足最低要求问题

    今天安装Oracle11g,出现INS-13001环境不满足最低要求问题: 解决方法 在安装时点击setup.exe之后,出现了:[INS-13001]环境不满足最低要求 这时,打开你的解压后的dat ...

  8. Codeforces 514C Watto and Mechanism 【Trie树】+【DFS】

    <题目链接> 题目大意:输入n个单词构成单词库,然后进行m次查询,每次查询输入一个单词(注意这些单词只由a,b,c构成),问该单词库中是否存在与当前查询的单词有且仅有一个字符不同的单词. ...

  9. JavaScript 六大类运算符(详细~)

    运算符   1.算术运算符:+.-.*./.%.++.--       单目(操作数为一个且为变量): i++.i--.++i.--i;     双目:+.-.*./.%;   双目其中 -*/%   ...

  10. ASP.NET MVC 常用路由总结

    1.URL模式 路由系统用一组路由来实现它的功能,这些路由共同组成了应用系统URL架构或方案,这种URL架构是应用程序能够识别并能对之做出响应的一组URL,当处理一个输入 请求时,路由系统的工作是将这 ...