《数据结构、算法与应用》第一章练习1.4
《数据结构、算法与应用》第一章习题1.4
最近在读《数据结构、算法与应用》这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还请大家多多留言交流多多指正,谢谢
4.
1)试编写一个计算斐波那契数列Fn的递归函数,并上机测试其正确性。
2)试编写一个非递归的函数来计算斐波那契数列Fn,该函数应能直接计算出每个斐波那契数。上机测试代码的正确性。
// // main.cpp // Test_03 // // Created by c137 on 14-3-31. // Copyright (c) 2014年 cc. All rights reserved. // 斐波那契数列 : 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 // 通项公式: a1=1,a2=1,an=a(n-1)+a(n-2)(n>=3,n∈N*) /* 4. 1) 试编写一个计算斐波那契数列Fn的递归函数,并上机测试其正确性。 2) 试编写一个非递归的函数来计算斐波那契数列Fn,该函数应能直接计算出每个斐波那契数。上机测试代码的正确性。 */ #include <iostream> using namespace std; unsigned int calFibonacciByRecursion(unsigned int n); unsigned int calFibonacci(unsigned int n); int main(int argc, const char * argv[]) { //4.1 cout << "递归计算第一项:" << calFibonacciByRecursion(1) << endl; cout << "递归计算第二项:" << calFibonacciByRecursion(2) << endl; cout << "递归计算第三项:" << calFibonacciByRecursion(3) << endl; cout << "递归计算第十项:" << calFibonacciByRecursion(10) << endl; //4.2 cout << "非递归计算第一项:" << calFibonacci(1) << endl; cout << "非递归计算第二项:" << calFibonacci(2) << endl; cout << "非递归计算第三项:" << calFibonacci(3) << endl; cout << "非递归计算第十项:" << calFibonacci(10) << endl; return 0; } /** * @brief 使用递归计算斐波那契数列 * * @param n 第n项 * * @return return 第n项的值 */ unsigned int calFibonacciByRecursion(unsigned int n) { if (n == 1 || n == 2) { return 1; } else { return calFibonacciByRecursion(n-2) + calFibonacciByRecursion(n-1); } } /** * @brief 使用非递归计算斐波那契数列 * * @param n 第n项 * * @return return 第n项的值 */ unsigned int calFibonacci(unsigned int n) { unsigned int res; // 当前项的值 unsigned int temp1 = 1; //保存第n-1项的值 unsigned int temp2 = 1; //保存第n-2项的值 if (n == 1 || n == 2) { return 1; } else { for (unsigned int i = 2; i < n; i++) { res = temp1 + temp2; //第三项时,为2 temp2 = temp1; temp1 = res; } return res; } }输出结果如下图所示:
本文由CC原创总结,如需转载请注明出处:http://blog.****.net/oktears/article/details/22863715