【C言語】関数と再帰 基本編

n の階乗を計算する

画像.png

再帰

//使用递归计算n的阶乘
#include<stdio.h>
int Jiecheng(int n)
{
    
    
	if (n<=1)
	{
    
    
		return 1;
	}
	else
	{
    
    
		return n * Jiecheng(n - 1);
	}
}
int main()
{
    
    
	int n = 0;
	scanf("%d", &n);
	int ret = Jiecheng(n);
	printf("%d", ret);
	return 0;
}

赤い線が呼び出し、青い線が戻り値です。
画像.png
再帰的な実行プロセスは、上の図でより明確に見ることができます。

サイクル

int Jiecheng(int n)
{
    
    
	int count = 1;
	while (n>1)
	{
    
    
		count = count * n;
		n--;
	}
	return count;
}
int main()
{
    
    
	int n = 0;
	scanf("%d", &n);
	int ret = Jiecheng(n);
	printf("%d", ret);
	return 0;
}

n番目のフィボナッチ数を見つけます。(オーバーフローは考慮していません)

画像.png

再帰

#include<stdio.h>
int Fib(int n)
{
    
    
	if (n>=3)
	{
    
    
		return Fib(n - 1) + Fib(n - 2);
	}
	else
	{
    
    
		return 1;
	}
}
int main()
{
    
    
	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d", ret);
	return 0;
}

サイクル

#include<stdio.h>
int Fib(int n)
{
    
    
	int a = 1;
	int b = 1;
	int c = 1;
	while (n>2)
	{
    
    
		c = a + b;
		a = b;
		b = c;
		n--;
	}
	return c;
}
int main()
{
    
    
	int n = 0;
	scanf("%d", &n);
	int ret = Fib(n);
	printf("%d", ret);
	return 0;
}

このブログでは、再帰とループをより深く理解していただくために、再帰とループを使用して問題を解決する方法を主に紹介します。

おすすめ

転載: blog.csdn.net/weixin_63284756/article/details/130422635
おすすめ