首页 > 代码库 > 求斐波那契单词的第n个字符
求斐波那契单词的第n个字符
定义【摘抄自Wiki】
Let be "0" and be "01". Now (the concatenation of the previous sequence and the one before that).
The infinite Fibonacci word is the limit
We have:
0
01
010
01001
01001010
0100101001001
...
The first few elements of the infinite Fibonacci word are:
0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, ...
Problem:
求斐波那契单词的第n个字符。即写如下函数:
char f(index)
思路:
初始条件:f(0)=0, f(1)=1斐波那契单词分为两部分,Sn-1和Sn-2。
假设index >= length(Sn-1),那么f(index) = f(index-length(Sn-1))。
不断递减index直到index <= 1为止,那么即可得出f(index)的值。
C++代码如下:
#include <vector>
#include <iostream>
#include <cassert>
char getCharInFibonacciWord(int index)
{
using namespace std;
assert(index >=0);
// The 48th fibonacci number is already out of range of int.
static int fibs[48] = {1,2,0};
while( index > 1)
{
int i=0;
for(int i=1; i<_countof(fibs); ++i)
{
if(fibs[i] == 0)
fibs[i] = fibs[i-1] + fibs[i-2];
if(fibs[i] > index)
{
index -= fibs[i-1];
break;
}
}
}
return (index == 0) ? ‘0‘ : ‘1‘;
}
int _tmain(int argc, _TCHAR* argv[])
{
for(int i=0; i<100; ++i)
std::cout << getCharInFibonacciWord(i);
std::cout << std::endl;
return 0;
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。