鱼C论坛

 找回密码
 立即注册
查看: 847|回复: 2

c++高精度+递归求斐波拉契第n项怎么写

[复制链接]
发表于 2024-3-24 16:09:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
c++高精度+递归求斐波拉契第n项怎么写
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-3-24 16:09:28 | 显示全部楼层
要实现高精度的斐波那契数列,可以使用字符串来存储每一项的值。首先,需要明确的是斐波那契数列的第0项为0,第1项为1。

接下来,我们可以使用递归的方法来计算斐波那契数列的第n项。递归的思想是,第n项的值等于第n-1项的值加上第n-2项的值。

下面是用C++编写的示例代码:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;

  4. string addStrings(string num1, string num2) {
  5.     if (num1.length() < num2.length()) {
  6.         swap(num1, num2);
  7.     }
  8.     int carry = 0;
  9.     int i = num1.length() - 1;
  10.     int j = num2.length() - 1;
  11.     string result = "";
  12.     while (i >= 0 || j >= 0 || carry) {
  13.         int x = i >= 0 ? num1[i--] - '0' : 0;
  14.         int y = j >= 0 ? num2[j--] - '0' : 0;
  15.         int sum = x + y + carry;
  16.         carry = sum / 10;
  17.         result = to_string(sum % 10) + result;
  18.     }
  19.     return result;
  20. }

  21. string fib(int n) {
  22.     if (n <= 1) {
  23.         return to_string(n);
  24.     }
  25.     string a = "0";
  26.     string b = "1";
  27.     for (int i = 2; i <= n; ++i) {
  28.         string temp = b;
  29.         b = addStrings(a, b);
  30.         a = temp;
  31.     }
  32.     return b;
  33. }

  34. int main() {
  35.     int n;
  36.     cout << "请输入要计算的斐波那契数列的项数:";
  37.     cin >> n;
  38.     string result = fib(n);
  39.     cout << "第" << n << "项的值为:" << result << endl;
  40.     return 0;
  41. }
复制代码


在上面的代码中,addStrings函数用于实现两个字符串数字的相加操作,fib函数利用递归思想实现了斐波那契数列的计算,main函数用于接收用户输入并输出结果。

注意,这种方法会占用较多的内存空间,因为每一项都需要使用字符串来存储。当计算较大的斐波那契数列时,可能会导致程序运行缓慢或内存溢出。如果需要更高效的实现方式,可以考虑使用迭代或矩阵快速幂等方法。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-24 23:08:37 | 显示全部楼层
  1. #include <iostream>
  2. #include <boost/multiprecision/cpp_int.hpp>

  3. using boost::multiprecision::cpp_int;
  4. using std::cout, std::endl;

  5. cpp_int fibonacci(cpp_int n) {
  6.     if(n == 0) return 0;
  7.     if(n == 1) return 1;
  8.     return fibonacci(n - 1) + fibonacci(n - 2);
  9. }

  10. int main() {
  11.     cout << fibonacci(10) << endl;
  12.     return 0;
  13. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 15:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表