Function Run Fun

编程基础——函数调用

1.5:Function Run Fun

题目:
我们都爱递归!不是吗?
请考虑一个三参数的递归函数w(a, b, c):
• if a <=0 or b < 0 or c < 0, then w(a, b, c) 返回1;
• if a > 20 or b > 20 or c > 20, then w(a, b, c) 返回w(20, 20, 20);
• if a < b and b < c, then w(a, b, c) 返回w(a, b, c-1)+w(a, b-1, c-1)- w(a, b-1, c);
• 否则,返回w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)。 这是一个很容易实现的函数。但存在的问题是,如果直接实现,对于取中间值的a、b和c(例如,a=15,b=15,c=15),由于大量递归,程序运行非常耗时。

输入
• 程序的输入是一系列整数三元组,每行一个,一直到结束标志-1-
1-1为止。请您高效地计算w(a, b, c)并输出结果。
输出
• 输出每个三元组w(a, b, c)的值

试题分析:
•对于取中间值的a、b和c,由于大量递归,程序运行非常耗时。所以,本题的递归函数计算采用记忆化递归进行计算,用一个三维的数组f来记忆递归的结果,f[a][b][c]用于记忆w(a, b, c)的返回值。

注意点:
• 时间复杂度的问题

Sample Input
1 1 1
2 2 2
10 4 6
50 50 50
-1 7 18
-1 -1 -1
Sample Output
w(1, 1, 1) = 2
w(2, 2, 2) = 4
w(10, 4, 6) = 523
w(50, 50, 50) = 1048576
w(-1, 7, 18) = 1

#include <stdio.h>
#define N 20
int f[N+1][N+1][N+1];
int w(int a,int b,int c){
	if(a<=0||b<=0||c<=0) return 1;
	else if(a>20||b>20||c>20) return w(20,20,20);
	else if(f[a][b][c]) return f[a][b][c];
 	else if(a<b&&b<c) return f[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);
	else return f[a][b][c]=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
}
int main () {
	int a,b,c;
	while(~scanf("%d%d%d",&a,&b,&c)){//while循环里的括号* 
		if(a==-1&&b==-1&&c==-1) return 0;
		printf("w(%d,%d,%d)=%d\n",a,b,c,w(a,b,c));
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误发生可能是因为代码中存在括号、引号等符号不匹配的情况,或者代码中在语法上不正确的位置添加了HTML标签或其他非代码的内容。这个错误的消息提示是“ntaxerror: unexpected token '<' at new function (<anonymous>) at runcode2fun”,意思是在代码的某个位置遇到了不期望的“<'”,而且这个错误发生在一个名为“runcode2fun”的函数中。要解决这个问题,可以检查代码中是否存在语法错误,或者尝试剪切并粘贴代码到其他的文本编辑器中,查看代码是否在其他地方被修改了。还可以尝试在代码中添加更多的注释来更好地理解代码的逻辑和运行过程,或者使用代码编辑器来自动检查和修复语法错误。最终,要保持代码的简洁、清晰和易于阅读,以便更容易地理解和修改。 ### 回答2: 在编写代码时,若出现了“syntaxerror: unexpected token '<' ”的错误提示,意味着代码中出现了不被识别的符号“<”,通常这种情况发生在HTML文件或其他文档中的JavaScript代码中,因为“<”通常是HTML标签的开始符号。在JavaScript中,"<"可以表示比较运算符或位运算符,但如果这个符号出现在了错误的位置,就会引发语法错误的异常。 而此错误出现在“runcode2fun”函数中,说明可能是这个函数调用了其他包含HTML标签的函数或代码引起的。解决这个问题的方法可以尝试检查一下所使用的函数或引入的代码是否要求混合使用HTML和JavaScript,如果是的话,可以将HTML和JavaScript代码分开编写。另外,还有可能是代码在运行过程中动态生成了HTML代码,可以尝试使用Javascript的模板引擎等框架,将代码和模板进行分离。 总之,出现“syntaxerror: unexpected token '<'”异常的原因,通常是由于HTML和JS代码混合导致造成的,只要将它们分离开来按照各自的语法规则编写,就可以成功避免这种问题的发生了。 ### 回答3: 这是一个程序出错的提示信息。首先,ntaxerror表示语法错误;unexpected token '<'表示代码中出现了一个意外的‘<’符号;at new function (<anonymous>) at runcode2fun是错误提示的位置信息,指出该错误发生在程序的哪一行。 可能的原因是,在代码某个部分中,程序尝试使用‘<’符号,但是用法却不正确,导致编译器无法识别,从而产生了语法错误。可能需要检查代码,找出出现‘<’符号的位置,并检查和纠正与之相关的语法错误。 此外,at new function (<anonymous>) at runcode2fun提示了错误位置信息,可以协助开发者更轻松地确定错误所在,从而更加迅速地找到错误并进行修正。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值