[已解决问题] 一道面试题
提问时间: 2008-04-11 14:30
浏览:180 次
今天又去面试了,遇见一道题分析了半天没有弄出来。现在给大家看下,希望能指点一下。如下:有一群猴子,它们每天要吃桃子,它们第一天吃的数量是总量的一半再多一个,第二天吃的是第一天剩下的一半再多一个,第三天吃的是第二天剩下的一半多一个,以此类推直到第N天的时候只剩下一个桃子了,请问一共有多少桃子?用用递归算法实现,最好是有详细代码,谢谢,静待佳音。
最佳答案
之所以用Int64,是因如果吃一个月话,桃子数Int32放不下
原来乘以2果然这么厉害,30天:3221225470,如果我有这么桃子,我就不用写程序了
========================
        static Int64 Total;

        static void Main(string[] args)
        {
            for (int i = 1; i <= 30; i++)
            {
                Total = 1;
                F(i);
                Console.WriteLine("{0}\t{1}",i,Total);
            }
            Console.Read();
        }

        static void F(int m)
        {
            if (m > 0)
            {
                Total = (Total + 1) * 2;
                m--;
                F(m);
            }
            else
            {
                return;
            }
        }
2008/4/11 15:33:38 回答者:丁学


提问者对于答案的评价:谢谢
评论
2个月前   Hunts.C :
一听这题目让我想到“汉诺塔”
2个月前   mafa :
老实说,我觉得这个答案不像递归,更像
Total = 1;
for ( int m=30; m>0; m--) Total=(Total+1)*2;

我觉得递归应该利用上一次的结果,这样更像一些:
long F(int m)
{
if (m>0)
return F(m-1)*2 +2;
else
return 1;
}
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除