递归阶乘代码 c# - "Invalid token" 错误
Recursion factorial code c# - "Invalid token" error
我正在尝试编写一个递归代码来计算给定数字的阶乘。 (3 的阶乘是“3*2*1 = 6”)。我写了下面的代码,打印了下面的错误信息
"Invalid token '(' in class, struct, or interface member declaration"
我检查了我的代码,在我看来,我看不到任何错误,我能做些什么来解决这个问题吗?下面发布了 C# 代码。
(ps。我不是 c# wizz。)
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 个参数,您从未使用 none 声明过一个参数。
您需要保留结果并显示出来。
如果您有兴趣,还有一些方法可以改进您已有的实际阶乘例程
你的代码有很多问题,无法编译,让我们检查每个错误
Invalid token '(' in class, struct, or interface member declaration
正如其他答案中指出的那样,这是任何方法之外的 class 中间的 Console.Readkey()
。将其移动到 Main
方法的底部。
Cannot implicitly convert type 'string' to 'int'
这是由于第 num1 = Console.ReadLine();
行造成的,因为该方法 return 是一个字符串,而您正试图将其分配给一个 int。 正确 处理此问题的方法是检查用户输入,以确保他们输入了数字。为简洁起见,我会做 错误的 并假定它是正确的。
num1 = int.Parse(Console.ReadLine()); // Use TryParse here, and notify the user if they typed something wrong
No overload for method 'factorial' takes 0 arguments
这是因为您尝试不带参数调用 factorial
方法。我想你是想输出上面调用的结果。
var result = factorial(num1, num2, num3);
Console.WriteLine("Your number is {0}", result);
The type or namespace name 'a' could not be found (are you missing a using directive or an assembly reference?)
这是由于这一行:a * b = c;
这没有意义。我假设你的意思是 c = a * b;
终于
'Rextester.Program.factorial(int, int, int)': not all code paths return a value
您需要 return factorial
的 if
之外的值。在这里你会进入一个无限循环,但至少你的代码可以编译!现在只需修复您的算法。这样就简单多了
static int factorial(int n)
{
if(n == 1)
return 1;
return factorial(n-1) * n;
}
我正在尝试编写一个递归代码来计算给定数字的阶乘。 (3 的阶乘是“3*2*1 = 6”)。我写了下面的代码,打印了下面的错误信息
"Invalid token '(' in class, struct, or interface member declaration"
我检查了我的代码,在我看来,我看不到任何错误,我能做些什么来解决这个问题吗?下面发布了 C# 代码。 (ps。我不是 c# wizz。)
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 个参数,您从未使用 none 声明过一个参数。
您需要保留结果并显示出来。
如果您有兴趣,还有一些方法可以改进您已有的实际阶乘例程
你的代码有很多问题,无法编译,让我们检查每个错误
Invalid token '(' in class, struct, or interface member declaration
正如其他答案中指出的那样,这是任何方法之外的 class 中间的 Console.Readkey()
。将其移动到 Main
方法的底部。
Cannot implicitly convert type 'string' to 'int'
这是由于第 num1 = Console.ReadLine();
行造成的,因为该方法 return 是一个字符串,而您正试图将其分配给一个 int。 正确 处理此问题的方法是检查用户输入,以确保他们输入了数字。为简洁起见,我会做 错误的 并假定它是正确的。
num1 = int.Parse(Console.ReadLine()); // Use TryParse here, and notify the user if they typed something wrong
No overload for method 'factorial' takes 0 arguments
这是因为您尝试不带参数调用 factorial
方法。我想你是想输出上面调用的结果。
var result = factorial(num1, num2, num3);
Console.WriteLine("Your number is {0}", result);
The type or namespace name 'a' could not be found (are you missing a using directive or an assembly reference?)
这是由于这一行:a * b = c;
这没有意义。我假设你的意思是 c = a * b;
终于
'Rextester.Program.factorial(int, int, int)': not all code paths return a value
您需要 return factorial
的 if
之外的值。在这里你会进入一个无限循环,但至少你的代码可以编译!现在只需修复您的算法。这样就简单多了
static int factorial(int n)
{
if(n == 1)
return 1;
return factorial(n-1) * n;
}