Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现

Reverse反转算法

 1 #include <iostream>
 2  3 using namespace std;
 4 //交换的函数  5 void replaced(int &a,int &b){
 6 int t = a;
 7 a = b;
 8 b = t;
 9 }
10 //反转 11 void reversed(int a[],int length){
12 int left = 0;
13 int right = length - 1;
14 while (left < right) {
15  replaced(a[left], a[right]);
16 left++;
17 right--;
18  }
19 }
20 void output(int a[],int length)
21 {
22 for (int i = 0; i<length; i++) {
23 cout << a[i] << " ";
24  }
25 }
26 int main()
27 {
28 int a[] = {1,2,3,4,5,6,7,8,9};
29 output(a, 9);
30 cout << endl;
31 reversed(a, 9);
32 output(a, 9);
33 }


斐波那契数列

 1 #include <iostream>
 2  3 using namespace std;
 4  5 //斐波那契数列  6 int qiebona(int a)
 7 {
 8 //也可以用if语句  9 switch (a) {
10 case 1:
11 case 2:
12 return a;
13 break;
14 15 default:
16 return qiebona(a-1)+qiebona(a-2);
17 break;
18  }
19 }
20 int main()
21 {
22 //验证斐波那契函数 23 cout << qiebona(1) << endl;
24 //然后打印前n个数的斐波那契数列 25 for (int i = 1; i <= 10; i++) {
26 cout << qiebona(i) << " ";
27  }
28 return 0;
29 }


Reverse反转单链表算法

 1 #include <iostream>
 2  3 using namespace std;
 4 //1首先这个数据节点中只有一个指针作为成员数据,所以这是一个单链表的节点结构  5 struct node{
 6 int payload;
 7 node* next;
 8 };
 9 //2对于一个长的单链表的操作,我们只能这个长链表的第一个节点或者说是第一个指针指向的节点开始操作 10 node* reversed(node* first){
11 //3如果链表为空或者只有一个,那就返回它自己呗 12 if (first->next == nullptr || first == nullptr) {
13 return first;
14 }//4如果有下一个实例,就
15 //5获取下一个实例 16 node* second = first -> next;
17 //这里就是递归, 18 node* new_head = reversed(second);
19 /*6 将下一个节点内部指针的方向反转,但是在反转之前,也要获取这下一个节点原来指向的下下个节点,也就是说,在这个操作之前,要在通过下一个节点获取下下一个节点.
20  假设在前一步加:node* third = second->next;但是这个简单的思路有局限性,当链表很长的时候,后面会重复这个获取下一个节点的过程,这样肯定是不明智的,因为链表的个数不确定,你就不知道要写多少代码,所以最好的办法就是通过递归重复执行前面相同的步骤(即算法)*/ 21 second -> next = first;
22 first -> next = nullptr;
23 return new_head;//7由于递归的特性,最后的return返回值会往前传递到最前面 24 }

时间: 2024-10-04 18:17:19

Reverse反转算法+斐波那契数列递归+Reverse反转单链表算法--C++实现的相关文章

算法-斐波那契数列的性能优化

问题描述 斐波那契数列的性能优化 10C http://www.nowcoder.com/books/coding-interviews/c6c7742f5ba7442aada113136ddea0c3?rp=1 牛客网上 的这道题,一个简单的递归,性能不满足要求,请问 有什么提高性能的算法 解决方案 递归性能当然差了,解决档案是:将递归改为迭代! 解决方案二: 为啥不直接上通项公式 解决方案三: 这是我写的源代码.接下来我将对递归和迭代进行分析,我觉得这才是重点! 解决方案四: 在大部分情况下

java数学归纳法非递归求斐波那契数列的方法_java

本文实例讲述了java数学归纳法非递归求斐波那契数列的方法.分享给大家供大家参考.具体如下: Integer能表示的最大值为 2147483647 大概是21.4亿,这里没有考虑溢出情况(当size为983时就会溢出)! import java.util.List; import java.util.ArrayList; /** * @author jxqlovejava * 斐波那契数列 */ public class Fibonacci { public static List<Intege

输出斐波那契数列的算法

斐波那契数列(Fibonacci polynomial),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.-- 要求编程输出这样的一组数,比如输出10个数的序列 /** * @param i 第n个数 * @param j 第n+1个数 * @param n 输出个数 */ public static void ff( int i,int j,int n){ int m=1; System.out.print(i+","); while(m++<n)

《BI那点儿事》Microsoft 时序算法——验证神奇的斐波那契数列

原文:<BI那点儿事>Microsoft 时序算法--验证神奇的斐波那契数列 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368斐波那契数列的发明者,是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨.他被人称作"比萨的列昂纳

斐波那契数列和反向计算问题

反向计算:编写一个函数将一个整型转换为二进制形式 反向计算问题,递归比循环更简单 分析:需要理解,奇数的二进制最后一位是1,偶数的二进制最后一位一定是0,联想记忆,这个和整型的奇偶性是一致的,1本身就是奇数,0本身是偶数.     十进制整数转换为二进制整数采用"除2取余,逆序排列"法. 具体做法是:用2整除十进制整数,可以得到一个商和余数,再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,

猆波那契数列-斐波那契数列求和~~~~~

问题描述 斐波那契数列求和----- 如何用C语言程序求斐波那契数列的前10项和,哪位大牛帮帮忙.还有什么水仙花问题 解决方案 用c++随便写的#include#include #include using namespace std;int main(){ int sum=1; int *a = new int[10]; vectorv; a[0] = 0; a[1] = 1; for (int i = 2; i < 10; i++) { a[i] = a[i - 1] + a[i - 2];

hdu 4549 M斐波那契数列

click here ~~ Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗? Input 输入包含多组测试数据: 每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 ) Output 对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n

用PHP迭代器来实现一个斐波纳契数列

斐波纳契数列通常做法是用递归实现,当然还有其它的方法.这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次.注释已经写到代码中,也是相当好理解的. <?php /* *@author nicesunboy@gmail.com */ class Fibonacci implements Iterator { private $previous = 1; private $current = 0; private $key = 0; publ

打印菱形以及斐波纳契数列的几种解法介绍

1.编写程序,打印*菱形推出第i行要打印的空白个数及*号个数,用for循环依次打印各行 复制代码 代码如下: #include<stdio.h> //总共要打印2*n-1行,逐行打印 void print1(int n) { int i,j; for(i=1;i<=n;i++){//打印1至n行 for(j=1;j<=n-i;j++)//打印n-i个空格 printf(" "); for(j=1;j<=2*i-1;j++)//打印2*i-1个*号 prin