0

我从接受采访的朋友那里得到了这个问题。面试官要求他在不使用除 main 之外的任何函数的情况下生成斐波那契数列。意味着他应该通过递归调用函数来生成斐波那契数列main(),但他无法做到这一点。在他的采访之后我也尝试过,但都是徒劳的。

有人可以谈谈他们在这方面的想法吗?

4

3 回答 3

2

简单的。在 C 中:

#include<stdio.h>
main(b,a){a>b?main(1,0):printf("%d\n",a),main(a+b,b);}

在 Java 中,你需要更多的代码和更多的内存,它最多只能达到 65535:

class F{public static void main(String[]v){int x=v.length,a,b;System
.out.println(a=x>>16);main(new String[(b=x&0xFFFF)+1<<16|a+b]);}}

我会被录用吗?

于 2012-09-12T19:52:56.440 回答
1
#include <stdio.h>

int fib1=0;
int fib2=1;
int fib_tmp;

int main()
{
  printf("%d ",fib1);
  fib_tmp=fib1+fib2;
  fib1=fib2;
  fib2=fib_tmp;
  if (fib1>0)
    main(); 
}

愚蠢的面试问题......至少它可以编译并为整数提供准确的结果。
它为所有 int 可表示的斐波那契数生成“递归”序列:)

于 2012-09-12T19:41:11.377 回答
1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    static int i = 0, j= 1;
    int res, max;
    /*
     * You could add some check for argc and argv
     */
    max = atoi(argv[1]);
    printf("%d ", i);
    res = i + j;
    i = j;
    j = res;

    if (j > max)
    {
        printf("\n");
        exit(0);
    }
    main(argc, argv);
}

例子:

$  gcc -std=c99 -Wall tst.c -o tst
$ ./tst 1000
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
$ 
于 2012-09-12T19:48:39.263 回答