收录日期:2020/05/27 10:33:08 时间:2016/06/12 02:11:55 标签:C#
要实现一方法:
public decimal CalculatePrice(int age)
{
decimal totalValue = 0;
if (age == 1)
   totalValue = 0;
else if (age == 2)
{
   totalvalue = 100 * decimal.Parse(2.35);
}
else if (age > 2)
{
   totalvalue = CalculatePrice(age - 1) * 13.65 + 100;//需要调用自身公式
}
return totalvalue;
}
要求:请不要用递归的方法;谢谢!

原型公式如下:

CalculatePrice (t)


  If t = 1
     CalculatePrice (t) = 0
  If t = 2
     CalculatePrice (t) = 100* 2.5) 
  If t > 2
     CalculatePrice (t) = CalculatePrice (t-1) * 13.65 + 100

不能用递归的方法,请问该怎么实现,小弟先谢了!
错误1:totalValue...totalvalue...大小写分清楚...
错误2:totalvalue = CalculatePrice(age - 1) * 13.65 + 100; 改成 totalvalue = CalculatePrice(age - 1) * 13.65m + 100; 数据类型问题...

警告1:totalvalue = 100 * decimal.Parse(2.35); 改成 totalvalue = 100 * 2.35m; 优化...

其他没看出什么问题...这种玩意儿递归最简单...为什么不用?
参考以下的代码,没经过调试,不过基本意思是:递归可以用循环代替。

        public decimal CalculatePrice(int age)
        {
            decimal totalValue = 0;
            if (age == 1)
                totalValue = 0;
            else if (age == 2)
            {
                totalvalue = 100 * decimal.Parse(2.35);
            }
            else if (age > 2)
            {
                totalvalue = 100 * decimal.Parse(2.35);
                for (int idx = 3; idx <= age; idx++)
                {
                    totalvalue = totalvalue * 13.65 + 100;
                }
            }
            return totalvalue;
        }
多谢 vrhero(授人以渔还要看对象...天才=99%的汗水+1%的灵感,)
不好意思,只想着表达意思没太注意细节。

public decimal CalculatePrice(int age)
{
    decimal totalValue = 0;
    if (age == 1)
       totalValue = 0;
    else if (age == 2)
    {
       totalValue = 100 * 2.35m;
    }
    else if (age > 2)
    {
       totalValue = CalculatePrice(age - 1) * 13.65m + 100;//需要调用自身公式
    }
    return totalValue ;
}

因为当 age > 2 时里面的算法比较复杂,这里我只是举个例子。
如查用递归的话速度比较慢,也比较占内存,所以想用其它的方法实现。
//当age>2的时候
public int Sum(int age)
{
   int sum=0;
   
    for(int i=age;i<0;i--)
       {
           sum+=i * 13.65 + 100;
       }
    return sum;
  
}
各位请注意:在age -1 的过程中,当age - 1 == 2 时会执行totalValue = 100 * 2.35m;而不是一直执行 * 13.65m + 100 
(我想应该是这样吧)
采用非递归来计算时,主要就是拆解这句
CalculatePrice (t) = CalculatePrice (t-1) * 13.65 + 100

因为t是逐次减一,那么简单办法就如楼上所写用循环来进行判断
不过楼上写的循环貌似优点问题
for (int i = t; i >2 ;i--)
{
sum += sum  * 13.65 + 100;
}
帮你改写了一下
    class price
    {
        public int Age = 0;
        public int getAgeOne = 0;
        public decimal getAgeTwo = 100 * 2.35m;
        public decimal GetAllValue(int age)
        {
            Age = age;
            if (Age == 1) return getAgeOne;
            if (Age == 2) return getAgeTwo;
            if (Age > 2)
            {
                int i = Age - 2;
                decimal c = getAgeTwo;
                for (int k = 0; k < i; k++)
                {
                    c = c * 13.65m + 100;
                }
                return c;
            }
            return 0;
        }

    }
    class Test
    {
        [STAThread]
        public static void Main(string[] args)
        {
            decimal g = CalculatePrice(10);
            System.Console.WriteLine(Convert.ToString(g));
            price t = new price();
            decimal k = t.GetAllValue(10);
            System.Console.WriteLine(Convert.ToString(k));
            System.Console.ReadLine();
           
        }

        public static decimal CalculatePrice(int age)
        {
            decimal totalValue = 0;
            if (age == 1)
                totalValue = 0;
            else if (age == 2)
            {
                totalValue = 100 * 2.35m;
            }
            else if (age > 2)
            {
                totalValue = CalculatePrice(age - 1) * 13.65m + 100;//需要调用自身公式
            }
            return totalValue;
        }

...再次发送代码,感觉应该可以满足lz要求,并且算是简洁吧

        public decimal CalculatePrice(int age)
        {
            decimal totalValue = 0;
            if (age == 1)
                totalValue = 0;
            else if (age == 2)
            {
                totalvalue = 100 * decimal.Parse(2.35);
            }
            else if (age > 2)
            {
                totalvalue = 100 * decimal.Parse(2.35);
                for (int idx = 3; idx <= age; idx++)
                {
                    totalvalue = totalvalue * 13.65 + 100;
                }
            }
            return totalvalue;
        }
时间上,基本没有区别,他们的执行效率一样
谢谢各位,已解决。
to neucf(),cdsgajxlp(起名很难) 非常感谢。

关于父类和子类继承赋值问题 新手求助:拷贝光盘中的源代码,无法登陆前台界面 看下昵称有没有显示。。。 请问如何动态改变静态文本框的颜色? 请教大神们一个关于xmlrpc与php的问题 VS2010将LPCTSTA转化为char*是出现标识符dest错误 中难度sql语句 eMMC(SD)驱动 写入数据出错的问题 昨天车上那个男吊死又搭讪妹子了 我想学习C#,但是我没有基础,怎么学? 拿到了一份offer,却又想着去培训,些许疑问请过来人解惑,呃,有点长 C# 实现按日期查询数据 周六加班的孩子伤不起呀 关于struts2样式问题??? 问个菜菜的问题,多文档怎么给新打开的窗口传参。 clang编译C++找不到文件,求教 冷笑话一则 这个sql语句为什么执行了两次 一张表中有留言记录也包含回复记录根据留言id来查询回复id的sql语句 c++ 实现限时输入 C++ string 类的迭代使用??? 数据库毕业设计 做个什么好呢 为什么Firefox中的cookie通过工具插件可以看,但js代码中使用document.cookie无法获取?? C#代码转VB.NET代码错误 怎么读取aspx中的VIEWSTATE内容 做过工资系统,自定义公式的请进! 不求代码,只需进来帮忙回复1个YES/NO即可! oracle日志中是否有select查询的记录 idhttp.post能做自动发帖么? 做c/c++网络编程方向,请大牛们给个这个方向成长过程中需要学习的相关知识 socket编程报错