吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2267|回复: 0
收起左侧

[C&C++ 转载] 打表法解决递归时堆栈爆炸

[复制链接]
KaQqi 发表于 2019-4-14 16:37
题目:
http://ybt.ssoier.cn:8088/problem_show.php?pid=1189

打表递归
[C++] 纯文本查看 复制代码
#include <stdio.h>

int data[1000000]={0,1,2};


int calculate(int a)
{
	if(data[a]) return data[a];
	return 	data[a] = (2*calculate(a-1) + calculate(a-2))%32767;
	
}

int main()
{
	int nn,n;
	scanf("%d",&nn);
	for(int i=2;i<1000000;i=i+10000){
		calculate(i);
	}
	while(nn--){
		scanf("%d",&n);
		printf("%d\n",data[n]);
	}
	return 0;
}



非打表递归
[C++] 纯文本查看 复制代码
#include <stdio.h>

unsigned long long data[1000000];


unsigned long long calculate(unsigned long long a)
{
	if(a == 1) return 1;
	if(a == 2) return 2;
	if(data[a]) return data[a];
	else 
	{
		unsigned long long result = 2*calculate(a-1) + calculate(a-2);
		data[a] = result;
		return result;
	}
		
		
}

int main()
{
	unsigned long long n;
	scanf("%lld",&n);
	unsigned long long buffer[100];
	for(unsigned long long i = 0;i<n;i++)
	{
	
		scanf("%lld",&buffer[i]);
		
	
	}
	for(unsigned long long i = 0;i<n;i++)
	{
		unsigned long long result = calculate(buffer[i]) % 32767;
		printf("%lld\n",result);
	}return 0;
}

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 07:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表