用C++编写函数,分别用非递归和递归计算 Lucas 数列第 n 项
Lucas 数列:1, 3, 4, 7, 11, 18, 29, 47, 76, 123...
法一
#include<iostream>
#include<cmath>
using namespace std;
long long int Lucas(int n)//定义函数
{long long int result,a=1,b=3,c;if (n==1)return a;//定义第一 项 else if (n==2)return b;//定义第二项 else{for (int i=3;i<=n;i++){c=a+b;result=c;//求第三项 a=b;//将第二项的值赋予a b=c;//将第三项的值赋予b }}return result;//返回结果
}
int main()
{int m;cout<<"输入一个整数:";cin>>m;cout<<"该处的Lucas值是:"<<Lucas(m);return 0;
}
法二
#include<iostream>
#include<cmath>
using namespace std;
long long int Lucas(int n)
{int result,a=1,b=3;if (n==1)return a;else if (n==2)return b;elsereturn Lucas(n-2)+Lucas(n-1);
}
int main()
{int m;cout<<"输入一个整数:";cin>>m;cout<<"该处的Lucas值是:"<<Lucas(m)<<endl;return 0;
}
递归 Lucas 函数的调用次数
改进前面的递归 Lucas 函数,使之能够记录被调用次数
利用改进的函数,计算 Lucas 数列的第 30 项,并统计此时函数被调用了多少次
如果计算 Lucas 数列的第 50 项呢?存在什么问题?怎么解决这个问题?
#include<iostream>
#include<cmath>
#include<stdlib.h>
#include<iomanip>
using namespace std;
long long int d=0;
long long int Lucas(int n)
{d++;//定义一个项数int result,a=1,b=3,c;if (n==1)return a;else if (n==2)return b;elsereturn Lucas(n-2)+Lucas(n-1);
}
int main()
{int m;cout<<"输入一个整数:";cin>>m;cout<<"该处的Lucas值是:"<<Lucas(m)<<endl;cout<<"调用次数n="<<d<<endl; //显示项数return 0;
}
运行50项函数被调用次数过多,运行速度慢,可能会产生溢出。
解决方法:1.用非递归法进行计算。
2.换用数据类型。
用C++编写函数,分别用非递归和递归计算 Lucas 数列第 n 项相关推荐
- C++第七次作业(函数_递归与非递归_多文件)
文章目录: 一:C++递归与非递归实现整数的阶乘 代码实现 运行结果 二:C++递归与非递归实现Fibonacci数列的计算:a0=1; a1=1; a2=a0+a1; a3=a1+a2; ..... ...
- 二叉树非递归先序遍历
二叉树的递归先序遍历很简单,假设二叉树的结点定义如下: 1 struct BinaryTreeNode 2 { 3 int m_nValue; 4 BinaryTreeNode* m_pLeft; 5 ...
- 二叉树的链式结构的非递归遍历
二叉树的链式结构的非递归遍历 一. 非递归前序遍历和非递归中序遍历 1. Stack.h #ifndef__STACK_H__ #define__STACK_H__ #include<st ...
- 非递归实现二叉树(前序,中序,后序)c/c++实现
这里还是用到栈的思想,为了方便用了c++的一些内容,把出栈,进栈,读栈顶元素用一个个函数封装起来了,前面做了一些处理来使用这些函数. 前序非递归 思想:一直走左边,依次进栈.等左边为空的时候,返回,也 ...
- 数据结构基础篇-链表反转(非递归与递归)C++实现
链表反转C++代码,附加打印逆序链表(不进行反转)代码. 测试用例: 5 2 3 4 10 5 1 4 1.非递归实现 思路:需要三个指针p1.p2.p3,分别指向上一个节点.当前节点与缓存的下一个节 ...
- 将递归函数转换为非递归形式
转自 :https://blog.csdn.net/sunny_ss12/article/details/47095381 1. 递归的调用原理:分而治之 为求一个大规模问题的问题,可以: (1)将原 ...
- C语言—递归函数 用递归方法编程计算输出Fibonacci数列,同时打印出计算Fibonacci数列每一项时所需的递归调用次数。
用递归方法编程计算输出Fibonacci数列,同时打印出计算Fibonacci数列每一项时所需的递归调用次数. **输入格式要求:"%d" 提示信息:"Input n:& ...
- 编写函数 int fac(int x)计算 x!的值。在主函数中输入 n 和 m 的值,通过调用函数 fac 计算m Cn 的值(要求分别用递归和非递归的方法编写函数 fac)
编写函数 int fac(int x)计算 x!的值.在主函数中输入 n 和 m 的值,通过调用函数 fac 计算m Cn 的值(要求分别用递归和非递归的方法编写函数 fac) 递归: #includ ...
- c语言中fact函数怎么调用,C语言程序题: 1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现...
点击查看C语言程序题: 1.编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现具体信息 答:int fac(int n) //非递归{int f=1; for(;n;) ...
最新文章
- Mybatis:颠覆你心中对事务的理解
- JAVA的两个FTP包的比较
- mysql删除redo_删除redo log group or member
- 【STM32】 keil软件工具--工程目标选项配置(下)
- apache 静态编译和动态编译参考
- linux accept过程,Linux协议栈accept和syn队列问题
- .NET框架程序设计
- 找call的万能方法,一招通杀所有网络游戏【个人实践出来的】
- wordpress如何压缩HTML代码
- 10G网络布线方案有多少种?
- springboot实现微信退款
- 服务器安装esxi系统
- 如何识别服务器连接的偶发故障?
- Python Pandas缺省值(NaN)处理
- 一个例子说明贝叶斯定理
- AI芯片:寒武纪DianNao,英伟达NVDLA和谷歌TPU1的芯片运算架构对比分析
- AJP:有和没有内化性精神障碍的受虐女孩情绪回路延迟成熟的差异性
- js获取当天0时刻,23点59分59秒的时间戳
- 【NDN基础】Named Data Networking 全文翻译
- mpu6050六轴传感器msp430驱动程序