次の2つの同様の例は、5を下回る数値の数字を出力する再帰関数を定義します。再帰の変数への関数呼び出しの代入は、異なる出力になります。
入力:12345
出力:4 //同じ機能を持っている5
#include <stdio.h>
int function(int n) {
if(!n) return 0;
int r = function(n/10);
if ((n%10) < 5) {
printf("%d", n%10);
return r+1;
}
else return r;
}
int main() {
int x;
scanf("%d", &x);
printf(" : %d\n", function(x));
return 0;
}
第二のコードよりも小さい4桁の数字があります:1234 、しかし、私は理解できないようです。私はプログラミングに流動的ではなく、まだそれほど新しくないので、質問がはっきりと述べられることを願っています。
入力:12345
出力:4321:4
#include <stdio.h>
int function(int n) {
if(!n) return 0;
if(n%10<5) {
printf("%d", n%10);
return function(n/10)+1;
}
return function(n/10);
}
int main() {
int x;
scanf("%d", &x);
printf(" : %d\n", function(x));
return 0;
}
2つのコードを比較する。彼らは何を違うのでしょうか?あなたの質問は出力データの順序に関連しているので、操作の順序に特に注意してください。ヒント:関数の結果を変数に代入することは、それ自体では何もしません。観察可能な振る舞いを変更することなく、2番目のコードを書き直すことも難しくありません。 –
鉛筆と紙でそれを試してみてください。あなたが機能(12345)を呼び出すとどうなりますか?ケース2の場合、n%10 <5テストに失敗しますので、次に関数(1234)を呼び出します。テストに合格したので、 "4"が印刷されます。等々。 – FredK