递归阶乘代码"无效标记"错误

本文关键字:quot 错误 无效 递归 阶乘 代码 | 更新日期: 2023-09-27 18:17:53

我正在尝试编写一个递归代码,计算给定数字的阶乘。(3的阶乘是"3*2*1 = 6")。我编写了以下代码,打印出以下错误信息

"类、结构或接口成员声明中无效的令牌"

我检查了我的代码,在我的眼睛里,我看不到错误,我能做些什么来解决这个问题吗?c#代码贴在下面。(ps.我不是c#专家。)

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            int num1;
            int num2;
            int num3 = 0;
            Console.WriteLine("Insert number");
            num1 = Console.ReadLine();
            num2 = num1 -1;
            factorial(num1, num2, num3);
            Console.WriteLine("Your number is {0}", factorial());
        }
        Console.ReadKey();

        static int factorial(int a, int b, int c)
        {
            if (a > 0)
            {
                a * b = c;
                factorial(a - 1, c, c);
                return c;
            }
        }
    }
}

递归阶乘代码"无效标记"错误

您有Console.ReadKey();外部方法声明。把它移到public static void Main(string[] args),它将工作

不像Console.WriteLine("Your number is {0}", factorial());

你的阶乘函数有3个参数,你从来没有声明过一个没有参数的。

您需要保留结果并显示它。

如果您感兴趣,还有一些方法可以改进您已经得到的实际阶乘例程

你的代码有很多问题,无法编译,让我们检查一下每个错误

类、结构或接口成员声明中无效的令牌'('

正如在其他答案中指出的那样,这是在任何方法之外的类中间的Console.Readkey()。把它移到Main方法的底部。

不能隐式地将'string'类型转换为'int'类型

这是由于num1 = Console.ReadLine();行,因为该方法返回一个字符串,而您试图将其赋值给int。处理这个问题的方法是检查用户输入,确保他们输入了一个数字。为简洁起见,我将用错误的,假设它是正确的。

num1 = int.Parse(Console.ReadLine()); // Use TryParse here, and notify the user if they typed something wrong

方法'factorial'不允许重载

这是因为您试图调用没有参数的factorial方法。我想你是想输出上面调用的结果。

var result = factorial(num1, num2, num3);
Console.WriteLine("Your number is {0}", result);

类型或命名空间名称'a'找不到(您是否缺少using指令或程序集引用?)

这是由于这一行:a * b = c;没有意义。我猜你指的是c = a * b;

最后

Rextester.Program。阶乘(int, int, int)':并非所有代码路径都返回值

您需要返回factorialif之外的值。在这里,您进入了一个无限循环,但至少您的代码可以编译!现在修正你的算法。这就简单多了

static int factorial(int n)
{
    if(n == 1)
        return 1;
    return factorial(n-1) * n;
}

实例:http://rextester.com/OUCC98161