Fibonacci字符串定义如下:
例如,前几个Fibonacci字符串是
a
bc
abc
bcabc
abcbcabc
Run Code Online (Sandbox Code Playgroud)
给定行和偏移量的目标是确定该偏移处的字符.更正式的:
输入:由空格分隔两个整数- K和P(0 <K≤10 9),(<P≤10 9),其中K是斐波纳契串的行数,而P是在一行中的位置编号.
输出:相关测试的所需字符:"a","b"或"c".如果P大于第k行(K≤10更大9),有必要导出«否溶液»
例:
输入: 18 58
输出: a
我写了这段代码来解决问题:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int k, p;
string s1 = "a";
string s2 = "bc";
vector < int >fib_numb;
fib_numb.push_back(1);
fib_numb.push_back(2);
cin >> k >> p;
k -= 1;
p -= 1;
while (fib_numb.back() < p) {
fib_numb.push_back(fib_numb[fib_numb.size() - 1] …Run Code Online (Sandbox Code Playgroud) 我正在学习f#而且我有一个非常微不足道的问题似乎没有意义.我正在研究Project Euler问题2,我得到了这个:
let fib (x : BigInteger) (y : BigInteger) (max : BigInteger) =
let added = x + y
if added > max then y
else fib y (x + y) max
Run Code Online (Sandbox Code Playgroud)
我在递归的fib调用时遇到错误:
值或构造函数'fib'未定义
而且我不确定为什么.有帮助吗?
在我正在进行的功能编程课程的当前练习作业中,我们必须制作一个给定函数的memoized版本.为了解释memoization,给出了以下示例:
fiblist = [ fibm x | x <- [0..]]
fibm 0 = 0
fibm 1 = 1
fibm n = fiblist !! (n-1) + fiblist !! (n-2)
Run Code Online (Sandbox Code Playgroud)
但我不完全了解这是如何工作的.
我们打电话吧fibm 3.
fibm 3
--> fiblist !! 2 + fibList 1
--> [fibm 0, fibm 1, fibm 2] !! 2 + [fibm 0, fibm 1] !! 1
--> fibm 2 + fibm 1
--> (fiblist !! 1 + fiblist 0) + 1
--> ([fibm 0, fibm 1] !! 1 …Run Code Online (Sandbox Code Playgroud) 我不一定要找答案,但我正在寻找这个问题的要求.发现这个问题正在学习面试,但不确定他们在问什么?
编写通过斐波那契序列运行并返回传递作为参数的指数函数.
Fibonacci序列由递归关系定义:
F n = F n-1 + F n-2,其中F 1 = 1且F 2 = 1.因此前12项将是F 1 = 1,F 2 = 1,F 3 = 2,F 4 = 3 ,F 5 = 5,F 6 = 8,F 7 = 13,F 8 = 21,F 9 = 34,F 10 = 55,F 11 = 89,F 12 = 144
第12个学期F 12是第一个包含三位数的术语.
Fibonacci序列中包含1000位数的第一项是什么?
我在Python中制作了一个强力解决方案,但计算实际解决方案绝对是永远的.任何人都可以提出非暴力解决方案吗?
def Fibonacci(NthTerm):
if NthTerm == 1 or NthTerm == 2:
return 1 # Challenge defines 1st and 2nd term …Run Code Online (Sandbox Code Playgroud) 我使用C++ 11中支持的模板元编程技术在编译时(constexpr)问题中编写了Fibonacci数计算程序.这样做的目的是计算模板元编程方法和旧的传统方法之间的运行时间差异.
// Template Metaprograming Approach
template<int N>
constexpr int fibonacci() {return fibonacci<N-1>() + fibonacci<N-2>(); }
template<>
constexpr int fibonacci<1>() { return 1; }
template<>
constexpr int fibonacci<0>() { return 0; }
// Conventional Approach
int fibonacci(int N) {
if ( N == 0 ) return 0;
else if ( N == 1 ) return 1;
else
return (fibonacci(N-1) + fibonacci(N-2));
}
Run Code Online (Sandbox Code Playgroud)
我在GNU/Linux系统上运行N = 40的两个程序并测量时间,发现传统解决方案(1.15秒)比基于模板的解决方案(0.55秒)慢两倍左右.这是一个重大改进,因为这两种方法都基于递归.
为了更好地理解它,我用g ++ 编译了程序(-fdump-tree-all标志),发现编译器实际上生成了40个不同的函数(如fibonacci <40>,fibonacci <39> ... fibonacci <0>).
constexpr int fibonacci() …Run Code Online (Sandbox Code Playgroud) 我读了一些声称Fibonacci搜索平均比二分搜索快的材料,主要原因是"它只涉及加法和减法,而不是除以2".
我有一些问题:
1.斐波那契搜索比二进制搜索更快,而不考虑操作速度吗?因为二进制搜索的步骤较少.
2.除以2可以通过位移操作来完成,它是否真的慢于加法?
3.与二进制搜索相比,斐波那契搜索的优势是什么?
我试图用F序模仿Haskell在F#中着名的无限斐波纳契列表.为什么以下序列没有按预期进行评估?它是如何评估的?
let rec fibs = lazy (Seq.append
(Seq.ofList [0;1])
((Seq.map2 (+) (fibs.Force())
(Seq.skip 1 (fibs.Force())))))
Run Code Online (Sandbox Code Playgroud) 什么是计算斐波纳契数从总和最有效的方式F(n),以F(m)其中F(n)和F(m)是第n和分别第m斐波那契数和0 = <N <= M <10 9(以F(0)= 0,F(1)= 1).
例如,如果n=0,m=3我们需要找到F(0)+F(1)+F(2)+F(3).
只是通过蛮力,它将需要很长时间的范围n和m提到.如果可以通过矩阵求幂来完成那么如何?
我对课堂作业有疑问,我需要知道如何使用迭代返回第n个Fibonacci序列(不允许递归).
我需要一些关于如何做到这一点的提示,以便我能更好地理解我做错了什么.我在program.cs中输出到控制台,因此它在下面的代码中不存在.
// Q1)
//
// Return the Nth Fibonacci number in the sequence
//
// Input: uint n (which number to get)
// Output: The nth fibonacci number
//
public static UInt64 GetNthFibonacciNumber(uint n)
{
// Return the nth fibonacci number based on n.
if (n == 0 || n == 1)
{
return 1;
}
// The basic Fibonacci sequence is
// 1, 1, 2, 3, 5, 8, 13, 21, 34...
// f(0) = 1
// f(1) = …Run Code Online (Sandbox Code Playgroud)