递归阶乘代码"无效标记"错误
本文关键字: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)':并非所有代码路径都返回值
您需要返回factorial
的if
之外的值。在这里,您进入了一个无限循环,但至少您的代码可以编译!现在修正你的算法。这就简单多了
static int factorial(int n)
{
if(n == 1)
return 1;
return factorial(n-1) * n;
}
实例:http://rextester.com/OUCC98161