【TUM-EI-Programmieren】405 c) 递归

该程序使用C语言实现了一个递归函数qRekursivDyn,用于计算Q-数,并利用动态初始化的缓存提高效率。在内存允许的情况下,程序会为一定范围内的Q-数计算结果存储到缓存中,减少重复计算。代码包括了输入验证、内存管理以及不同步长的计算示例。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <stdlib.h>


void dynInit(int n, int cache[])
{   
    int i;

    if(n>=1) cache[1]=1;
    if(n>=2) cache[2]=1;
    
    for(i=3;i<=n;i++)
    {
        cache[i]=0;
    }
}


int qRekursivDyn(int n, int cache[])
{   
    if(cache[n]) return cache[n];
    
    return cache[n]=qRekursivDyn(n-qRekursivDyn(n-1,cache),cache) +qRekursivDyn(n-qRekursivDyn(n-2,cache),cache)
;}


int main()
{
	int n = 0, *cache, i;
	int ergebnisR;

	printf("Nummer der gewuenschten Q-Zahl: ");
	scanf("%i", &n);

	if (n <= 0)
	{
		return 1;
	}

	cache = (int*) malloc((n+2) * sizeof(int));
	if (cache == NULL) 
	{
		printf("Zu wenig Speicher zur Berechnung einer so großen Q-Zahl.\n");
		return 1;
	}

	dynInit(n, cache);

	if(n <= 1000) 
	{
		printf("Cache: "); 
		for (i=1; i<=n; i++) printf ("%3d ", cache[i]); 
		printf("\n");

		printf("Berechne qRekursivDyn(n/2+1, cache):\n");
		ergebnisR = qRekursivDyn(n/2+1, cache);
		printf("Cache: "); 
		for (i=1; i<=n; i++) printf ("%3d ", cache[i]); 
		printf("\n");

		printf("Berechne qRekursivDyn(n/4*3+1, cache):\n");
		ergebnisR = qRekursivDyn(n/4*3+1, cache);
		printf("Cache: "); 
		for (i=1; i<=n; i++) printf ("%3d ", cache[i]); 
		printf("\n");

		printf("Berechne qRekursivDyn(n, cache):\n");

		dynInit(n, cache);

		ergebnisR = qRekursivDyn(n, cache);
		printf("Cache: "); 
		for (i=1; i<=n; i++) printf ("%3d ", cache[i]); 
		printf("\n");

	}
	else 
	{
		ergebnisR = qRekursivDyn(n, cache);
	}
	
	printf("\nDynamische rekursive Loesung: %i\n", ergebnisR);

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值