自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比。

参考运行截图:

递归和递推区别

1,从程序上看,递归表现为自己调用自己,递推则没有这样的形式。

2,递归是从问题的最终目标出发,逐渐将复杂问题化为简单问题,最终求得问题

是逆向的。递推是从简单问题出发,一步步的向前发展,最终求得问题。是正向的。

3,递归中,问题的n要求是计算之前就知道的,而递推可以在计算中确定,不要求计算前就知道n。

4,一般来说,递推的效率高于递归(当然是递推可以计算的情况下)

最容易理解就是结合一个经典的例子:斐波那契数列

递归求解

int fib(n){
    return n < 2 ? 1 : fib(n-1)+f(n-2);
}

递推求解

int fib(int n){
    int fn   = 1;
    int fn_1 = 0;
    for(int i=0; i<n; i++) {
       int t = fn
       fn    = fn + fn_1;
       fn_1  = t;
    }
    return fn;
}

递推 Inductive 是从1 往 n推(未知)

递归Recursive是从n(未知)往1推, 再层层返回

源代码:

#include<stdio.h>

int main()

{

int n;

printf("请输入整数n(0≤n≤10):");

scanf_s("%d", &n);

printf("用递推方法求:%d!=%d\n", n, fac1(n));

printf("用递归方法求:%d!=%d\n", n, fac2(n));

return 0;

}

int fac1(int x)//递推

{

int i, k = 1;

for (i = 1; i <=x; i++)

k = k * i;

return(k);

}

int fac2(int x)//递归

{

int f = 1;

if (x == 1) {

return 1;

}

else {

return x * fac2(x - 1);

}

}

自定义函数fac1用递推方法求n!,自定义函数fac2用递归方法求n!,主函数中输入整数n(0≦n≦10)后,分别调用函数fac1和函数fac2求n!,最后输出调用的结果值进行对比。相关推荐

  1. 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例二 | 修改边界条件 | 使用递推方法证明 )

    文章目录 一.根据 " 线性常系数差分方程 " 与 " 边界条件 " 确定系统是否是 " 线性时不变系统 " 案例 1.使用递推方法证明 2 ...

  2. 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例 | 使用递推方法证明 )

    文章目录 一.根据 " 线性常系数差分方程 " 与 " 边界条件 " 确定系统是否是 " 线性时不变系统 " 案例 1.使用递推方法证明 2 ...

  3. 编写一个C程序,实现以下功能:编写一个函数decTobin(int n),该函数能将一个十进制数n转换成二进制数,输入13 输出 1101。在main函数中输入整数n,调用函数,输出它的二进制

    题目要求: 编写一个C程序,实现以下功能: //编写一个函数decTobin(int n),该函数能将一个十进制数n转换成二进制数,输入13 输出 1101. //在main函数中输入整数n,调用函数 ...

  4. 枚举算法:概率计算。在标注编号分别为1,2,...,n的n张牌中抽取3张,试求抽出3张牌编号之和为素数的概率。输入整数n(3<n<=3000),输出对应的概率(四舍五入到小数点后第3位)。

    概率计算.在标注编号分别为1,2,-,n的n张牌中抽取3张,试求抽出3张牌编号之和为素数的概率.输入整数n(3<n<=3000),输出对应的概率(四舍五入到小数点后第3位). 思路: 组合 ...

  5. 输入整数n(0<=n<=1000),紧接着在下一行连续输入n个数。随后输出这一组数的最小值和最大值。

    标题 输入整数n(0<=n<=1000),紧接着在下一行连续输入n个数.随后输出这一组数的最小值和最大值. ##解决方法 根据题意输入n个数可以用循环思想,并用if语句进行比较判断,最后进 ...

  6. OJ1050: 阶乘的累加和(C语言实现多重循环和递推方法)

    题目描述 求1! + 2! + --n! 输入 输入一个整数n,你可以假定n不大于10. 输出 输出一个整数,即阶乘累加的结果,单独占一行. 样例输入 Copy 4 样例输出 Copy 33 方法一: ...

  7. CNDO-INTGRL-SS-BINTGS-斯莱特轨道指数---递推方法

    在Approximate Molecular Orbital Theory by Pople John A., Beveridge David L. 的182页出现了BINTGS函数,这个函数只有一个 ...

  8. tanx的n次方不定积分递推方法

    设 令 n = 0,1,求出两个不定积分 递推过程

  9. 55 - 算法 -动态规划 -数塔问题 感觉都是数组建模 递推方法规则

    //模板#include <iostream> #include <cstdio> #include <string> using namespace std;/* ...

最新文章

  1. 大众点评字体_点评里的神笔马良!她的美食笔记会让你惊掉下巴!
  2. jQuery.extend与jQuery.fn.extend的区别
  3. 05: zabbix 监控配置
  4. 【maven3学习之三】maven构建一个简单的Hello World
  5. JMeter学习(三十一)Access Log Sampler
  6. Firefox无法启动,提示Profile is yet in use by another Firefox
  7. 【剑指offer】面试题33:二叉搜索树的后序遍历序列
  8. CDH 版本 Kafka 外网设置
  9. Spring源码分析之lazy-init属性的配置
  10. “630”落幕 光伏何去何从?
  11. 致远互联携手华为云启动开发者大赛,加速企业应用定制向平台生态转型
  12. 为什么我们要阅读源码?
  13. 数据结构c语言版堆排序,【数据结构】堆排序(C++实现)
  14. Shanda EZ Mini
  15. Linux设备驱动程序学习 高级字符驱动程序操作[阻塞型I/O和非阻塞I/O]【转】
  16. Spring整合MyBatis为什么导致MyBatis一级缓存失效
  17. 怎么讲计算机屏幕录制,屏幕录制软件怎么用?教你2种屏幕录制方法
  18. android qq输入法,Android版QQ输入法:滑动输入成最大亮点
  19. 【毕业设计】基于大数据的抖音短视频数据分析与可视化 - python 大数据 可视化
  20. 数学建模之倚天剑与屠龙刀

热门文章

  1. air android 后台运行,AIR Android:使用模拟器运行程序
  2. winxp右键进入dos
  3. OsgEarth星空背景
  4. 【数据库基础】数据库的数据查询
  5. 计算机平面设计基础 photoshop基本操作
  6. 【原创】samba移植到android流程
  7. 2014 android 新技术,向友商学习 Android 12新功能前瞻:似曾相识
  8. 武大地理信息科学本科生的专业相关网站总结分享(包括制图、专业课、自学复习等)
  9. 转自goosman的编程开发心路历程
  10. VR眼镜连接android设备,如何将VR眼镜的屏幕投影到计算机或电视上?