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*)

 /*
斐波那契数列 迭代实现 (打印出前40个)
*/
#include <stdio.h>
int main(){
int i, arr[];
arr[] = ;
arr[] = ;
printf("%d %d ",arr[],arr[]);
for(i=; i<; i++){
arr[i] = arr[i-] + arr[i-];
printf("%d ",arr[i]);
}
printf("\n"); return ; }
 /*
斐波那契数列 递归实现 (打印出前40个)
*/
#include <stdio.h>
/*
int fb(int n){
if(n == 0){
return 0;
}else if(n == 1){
return 1;
}else{
return fb(n-1) + fb(n-2);
}
}
*/ int fb(int n){
if(n<){
return n == ? :;
}else{
return fb(n-) + fb (n-);
} } int main(){
int i;
for(i=; i<; i++){
printf("%d ",fb(i));
}
printf("\n"); return ;
}

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

 /*
递归实现阶乘
递归方式定义:0!=1,n!=(n-1)!×n。
*/ #include <stdio.h>
int fact(n){
if(n == ){
return ;
}else{
return fact(n-) * n;
}
} int main(){
int n = ;
printf("%d\n",fact(n));
return ;
}

eg3:

 #include <stdio.h>
int print(){
char a;
scanf("%c", &a);
if(a != '#'){
print();
}
if(a != '#'){
printf("%c",a);
}
return ;
}
int main(){
print();
printf("\n");
return ;
}

解题思路:

eg4:二分法查找

 /*
二分法查找:迭代实现
*/
#include <stdio.h>
int main(){
int arr[] = {,,,,,,,,,};
int input, low, high, mid;
low = ;
high = ;
mid = (low + high) / ;
scanf("%d", &input); while(input != arr[mid]){
if(input < arr[mid]){
high = mid;
mid = (low + high) / ;
}else{
low = mid;
mid = (low + high) / ;
}
}
printf("%d ",mid);/*输出要查找数字在数组中的下标*/
return ; }
 /*
二分法查找:递归实现
*/ #include <stdio.h>
int fun(int low, int high, int input, int arr[]){
int mid;
mid = (low + high) /;
if(arr[mid] == input){
return mid;
}else{
if(input < arr[mid]){
high = mid;
return fun( low, high, input, arr);
}else{
low = mid;
return fun( low, high, input, arr);
}
} }
int main(){
int arr[] = {,,,,,,,,,};
int input, low, high;
low = ;
high = ;
scanf("%d", &input);
printf("%d \n",fun(low, high, input, arr));/*输出要查找数字在数组中的下标*/
return ;
}

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. Spring data JPA中使用Specifications动态构建查询

    有时我们在查询某个实体的时候,给定的条件是不固定的,这是我们就需要动态 构建相应的查询语句,在JPA2.0中我们可以通过Criteria接口查询,JPA criteria查询.相比JPQL,其优势是类 ...

  2. poshytip基本使用

    js基本调用方法 $("#tips").poshytip({ content: $this.text(), alignTo: 'target', alignX: direction ...

  3. mysql 一张表的多个字段关联另外一张表

    SELECT vtiger_orderitem.orderid, ( SELECT vtiger_users.last_name FROM vtiger_users WHERE vtiger_orde ...

  4. device not found解决方案

    今天在使用cordova tools进行真机调试的,报了一个错:device not found; 字面意思就是没有发现设备,这时候可以首先尝试重启adb服务 C:\Users\username\Ap ...

  5. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-2项目说明和源码下载

    本文目录1. 摘要2. Window下运行 3.linux下运行4. 开发记录5. 总结 1.概要 写<Asp.Net Core 2.0 项目实战>系列断断续续已经很长时间了,期间很多朋友 ...

  6. Zk 集群概念

    https://blog.csdn.net/gs80140/article/details/51496925

  7. Service Fabric SfDevCluster目录从默认的C盘移动

    管理员权限打开Powershell CD\ 回车 CD "C:\Program Files\Microsoft SDKs\Service Fabric\ClusterSetup" ...

  8. jQuery获得页面绝对和相对的位置

    获得某一元素绝对x,y位置,可以用offset方法 var X = $('#DivID').offset().top; var y=$("#divid").offset().lef ...

  9. NLR:利用非线性回归,梯度下降法求出学习参数θ,进而求得Cost函数最优值——Jason niu

    import numpy as np import random def genData(numPoints,bias,variance): x = np.zeros(shape=(numPoints ...

  10. 【H5】-- FormData用法介绍以及实现图片/文件上传--【XUEBIG】

      一.概述 FormData 对象的使用: 1.用一些键值对来模拟一系列表单控件:即把form中所有表单元素的name与value组装成一个queryString 2. 异步上传二进制文件. 二.使 ...